【问题标题】:Conditionally run unit tests using SpringJUnit4ClassRunner at run time在运行时使用 SpringJUnit4ClassRunner 有条件地运行单元测试
【发布时间】:2014-07-10 00:17:15
【问题描述】:

我有一个 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) 上不可用。请任何人帮我解决一下这里的代码问题。

【问题讨论】:

  • 您必须在某处写入验证码。 Assume.assumeTrue(SomeTestFixture.somePrecondition()) 有什么问题?它实际上会在该点停止执行并将测试标记为已跳过。

标签: maven unit-testing junit spring-test


【解决方案1】:

根据文档,它看起来完全符合您的需要:

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

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

文档摘录:

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

【讨论】:

  • 感谢 khmarbaise!如果对开箱即用的东西没有希望,这是更好的解决方案之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2013-06-02
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多