有条件地在运行时使用SpringJUnit4ClassRunner运行单元测试

时间:2014-05-21 11:21:44

标签: unit-testing maven junit spring-junit

我有一个jUnit测试用例来测试助手,实用程序,服务等的Spring托管bean。所以我用SpringJUnit4ClassRunner和contextConfiguration设置了单元测试类。例如 -

@ContextConfiguration({ "classpath:context-file.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class UnitTests {


 @Test
 public void test1() {
   //...
 }

 @Test
 public void test2() {
   //...
 }

 @Test
 public void test3() {
   //...
 }

 @Test
 public void test4() {
  //...
 }

}

我想在运行时在某些条件下运行这四个(或更多)单元测试,例如 如果互联网可用然后运行测试UnitTests.test1(),如果数据库已连接然后运行UnitTests.test2(),如果存在图像文件目录然后运行测试UnitTests.test3(),如果远程服务器正确响应然后运行测试UnitTests.test4()。

虽然我已经通过了jUnit org.junit.Assume 但它并不合适,但它可以使测试框架能够运行所有测试或跳过所有测试。 @Ignore 也不适用于这些情况。还经历了 junit-ext https://code.google.com/p/junit-ext/),但其依赖关系在maven-central存储库(junit-ext-maven-dependency)上不可用。请有人帮我解决一些代码的问题。

1 个答案:

答案 0 :(得分:2)

根据文档,它看起来与您的需求完全相同:

@Test
public void filenameIncludesUsername() {
    assumeThat(File.separatorChar, is('/')); //Check here the condition
    assertThat(new User("optimus").configFileName(), is("configfiles/optimus.cfg"));
}

@Test public void correctBehaviorWhenFilenameIsNull() {
   assumeTrue(bugFixed("13356"));  // bugFixed is not included in JUnit
   assertThat(parse(null), is(new NullDocument()));
}

如果assumeThat()失败,它将忽略测试用例。如果你在@Before或@BeforeClass中做一个假设,而不是全班。

摘自文档:

  

@Before或@BeforeClass方法中的失败假设将具有   与班级的每个@Test方法中的失败假设相同。