如何指定JUnit测试依赖项?

时间:2010-04-06 12:06:41

标签: java unit-testing junit

我们的工具包有超过15000个JUnit测试,如果其他测试失败,许多测试都会失败。例如,如果方法X.foo()使用Y.bar()和YTest.testBar()失败的功能,那么XTest.testFoo()也将失败。显然,由于X.foo()特有的问题,XTest.testFoo()也会失败。

虽然这很好但我仍然希望运行两个测试,如果可以使用指向YTest.testBar()的XTest.testFoo()来注释测试依赖项,那将是很好的。通过这种方式,人们可以立即看到X.foo()使用的功能也失败了,什么不能。

JUnit或其他地方是否有这样的注释?类似的东西:

public XTest {

  @Test
  @DependsOn(method=org.example.tests.YTest#testBar)
  public void testFoo() {
     // Assert.something();
  }

}

6 个答案:

答案 0 :(得分:24)

JExampleTestNG有类似的东西。

我不知道它有多有用,但是如果你试一试,请回来告诉我们它是否有用。

答案 1 :(得分:17)

答案 2 :(得分:5)

org.junit.FixMethodOrder

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 这取决于你的单元测试类。

您可以将方法命名为public void step1_methodName etc

答案 3 :(得分:4)

您可以声明test dependencies in TestNG,语法与示例中的语法几乎相同。我不认为JUnit提供类似的东西。

答案 4 :(得分:1)

我真的没有这样的东西。(编辑:你每天都学到新东西:))在我看来,这不是一件坏事(虽然我可以看到它很有用,特别是当JUnit用于其他形式的自动化测试时 - 例如,集成测试)。您的测试IMO并不是最严格意义上的“单元测试”(至少不是X#foo()的测试)。 X#foo()的测试应该成功或失败,仅依赖于 来实现X#foo()。它不应该依赖于Y#foo()

我在你的位置上做的是模拟Y,并用非常简单的受控行为实现MockY#foo()之类的东西,并在X#foo()的测试中使用它。

也就是说,通过15,000次测试,我可以看出这对重构来说是多么痛苦。 :)

答案 5 :(得分:1)

behavior driven designjBehave中,有一个关键字GivenScenarios,用于导入在主要方案之前运行的方案列表。这提供了定义依赖关系并具有一个失败点的机会。 jBehave的日志记录将告诉您依赖项或主体部分中的测试是否失败。