当编写与外部资源交互的代码(例如使用Web服务或其他网络操作)时,我经常构造类,以便它也可以使用文件或其他输入方法“存根”。因此,我最终使用存根实现来测试系统的其他部分,然后使用一个或两个专门测试调用Web服务的测试。
问题是我不想从Jenkins或我运行项目的所有测试(例如“gradle test”)调用这些外部服务。某些服务有副作用,或者可能无法供所有开发人员访问。
现在我只是取消注释然后重新评论这些特定测试方法的@Test注释以启用和禁用它们。启用它,手动运行以检查它,然后记得再次注释掉它。
// Uncomment to test external service manually
//@Test
public void testSomethingExternal() {
有更好的方法吗?
编辑:对于手动单元测试,我使用Eclipse并且能够右键单击测试方法并执行Run As - > JUnit测试。但是,如果没有(未注释的)注释,这是行不通的。
答案 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
将被排除。