从自动化测试套件中排除一些JUnit测试

时间:2013-09-06 08:17:54

标签: java unit-testing junit

当编写与外部资源交互的代码(例如使用Web服务或其他网络操作)时,我经常构造类,以便它也可以使用文件或其他输入方法“存根”。因此,我最终使用存根实现来测试系统的其他部分,然后使用一个或两个专门测试调用Web服务的测试。

问题是我不想从Jenkins或我运行项目的所有测试(例如“gradle test”)调用这些外部服务。某些服务有副作用,或者可能无法供所有开发人员访问。

现在我只是取消注释然后重新评论这些特定测试方法的@Test注释以启用和禁用它们。启用它,手动运行以检查它,然后记得再次注释掉它。

// Uncomment to test external service manually
//@Test
public void testSomethingExternal() {

有更好的方法吗?

编辑:对于手动单元测试,我使用Eclipse并且能够右键单击测试方法并执行Run As - > JUnit测试。但是,如果没有(未注释的)注释,这是行不通的。

3 个答案:

答案 0 :(得分:6)

我建议使用junit类别。有关详细信息,请参阅此博客:https://community.oracle.com/blogs/johnsmart/2010/04/25/grouping-tests-using-junit-categories-0

基本上,您可以将某些测试注释为特殊类别,然后您可以设置两个测试套件:一个运行该类别的测试,另一个忽略该类别中的测试(但运行其他所有内容)< / p>

@Category(IntegrationTests.class)
public class AccountIntegrationTest {

  @Test
  public void thisTestWillTakeSomeTime() {
    ...
   }

  @Test
  public void thisTestWillTakeEvenLonger() {
     ....
  }

}

你甚至可以注释个别测试“

public class AccountTest {

   @Test
   @Category(IntegrationTests.class)
   public void thisTestWillTakeSomeTime() {
     ...
    }

任何时候我看到手动打开或关闭的东西我都会畏缩。

答案 1 :(得分:2)

据我所知,你使用gradle和JUnit的API说注释@Ignore禁用了测试。我将添加gradle任务,为这些测试添加@Ignore

答案 2 :(得分:1)

您可以使用@Ignore批注来防止它们在测试期间自动运行。如果需要,您可以手动触发忽略 d测试。

    @Test
    public void wantedTest() {
        return checkMyFunction(10);
    }

    @Ignore
    @Test
    public void unwantedTest() {
        return checkMyFunction(11);
    }

在上面的示例中,unwantedTest将被排除。

相关问题