7

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

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

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

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

有没有更好的方法来做到这一点?

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

4

4 回答 4

7

我建议使用 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() {
     ...
    }

每当我看到手动打开或关闭某些东西时,我都会畏缩。

于 2013-09-07T21:35:28.720 回答
3

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

于 2013-09-06T08:22:41.067 回答
3

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

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

于 2013-09-06T08:23:31.157 回答
2

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

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

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

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

于 2020-07-16T08:04:18.533 回答