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

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

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

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

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

有没有更好的方法呢?

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

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

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

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

}

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

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

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

如果您只是想禁用尚未编写的function测试,或者暂时手动禁用某些测试,您可以使用@Ignore ; 测试将被跳过但仍在报告中注明。

如果您想要一些类似Spring Profiles的东西,您可以在其中定义运行测试的规则集,您应该将测试分成单独的测试用例或使用Filter

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