4

在我的项目中,我有需要很长时间才能运行的验收测试。当我在代码中添加新功能并编写新测试时,我想为了时间跳过一些现有的测试用例。我正在使用 SpringJUnit4ClassRunner 使用 Spring 3 和 junit 4。我的想法是为测试类创建一个注释(@Skip 或其他东西)。我猜我将不得不修改运行程序以查找此注释并从系统属性中确定是否应在测试时包含测试类。我的问题是,这很容易做到吗?还是我在某处缺少对我有帮助的现有功能?

谢谢。埃里克

4

3 回答 3

15

在 Junit 4 中使用@Ignore和在 Junit 5 中使用@Disabled注释您的类(或单元测试方法),以防止执行带注释的类或单元测试。

忽略测试类:

@Ignore
public class MyTests {
    @Test
    public void test1() {
       assertTrue(true);
    }
}

忽略单个单元测试;

public class MyTests {
    @Test
    public void test1() {
         assertTrue(true);
    }

    @Ignore("Takes too long...")
    @Test
    public void longRunningTest() {
        ....
    }

    @Test
    public void test2() {
         assertTrue(true);
    }
}
于 2012-11-07T21:21:55.687 回答
2

mvn install -Dmaven.test.skip=true
这样你就可以在没有测试的情况下构建你的项目,

mvn -Dtest=TestApp1 test
您只需添加应用程序的名称即可对其进行测试。

于 2013-10-01T06:40:44.107 回答
1

我使用 Spring 配置文件来执行此操作。在您的测试中,在 Spring 环境中自动装配:

@Autowired
private Environment environment;

在您不想默认运行的测试中,检查活动配置文件并在相关配置文件不活动时立即返回:

@Test
public void whenSomeCondition_somethingHappensButReallySlowly() throws Exception{
    if (Arrays.stream(environment.getActiveProfiles()).noneMatch(name -> name.equalsIgnoreCase("acceptance"))) {
        return;
    }
    // Real body of your test goes here
}

现在,您可以使用以下方式运行日常测试:

> SPRING_PROFILES_ACTIVE=default,test gradlew test

当您想要运行验收测试时,例如:

> SPRING_PROFILES_ACTIVE=default,test,acceptance gradlew test

当然,这只是一个示例命令行,假设您使用 Gradle 包装器来运行测试,并且您使用的活动配置文件集可能不同,但关键是您启用/禁用acceptance配置文件。您可以在您的 IDE、CI 测试启动器等中执行此操作...

注意事项:

  1. 您的测试运行程序会将测试报告为运行,而不是忽略,这是误导性的。
  2. 而不是在单个测试中硬编码配置文件名称,您可能想要一个集中的地方来定义它们......否则很容易忘记所有可用的配置文件。
于 2017-08-30T21:42:22.847 回答