使用SpringJUnit4ClassRunner时,在运行时跳过测试

时间:2012-11-07 18:22:46

标签: spring junit

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

感谢。 埃里克

3 个答案:

答案 0 :(得分:9)

使用JUnit的@Ignore注释注释您的类(或单元测试方法),以防止执行带注释的类或单元测试。

忽略测试类:

@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);
    }
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我使用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. 在个别测试中,您可能想要一个中心位置,而不是单个测试中的硬编码名称,否则很容易失去对所有可用配置文件的跟踪。