我们的工具包有超过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();
}
}
答案 0 :(得分:24)
答案 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 design库jBehave中,有一个关键字GivenScenarios
,用于导入在主要方案之前运行的方案列表。这提供了定义依赖关系并具有一个失败点的机会。 jBehave的日志记录将告诉您依赖项或主体部分中的测试是否失败。