我如何指定JUnittesting依赖关系?

我们的工具包有超过15000个JUnittesting,如果其他一些testing失败,很多testing都会失败。 例如,如果方法X.foo()使用Y.bar()中的function并且YTest.testBar()失败,那么XTest.testFoo()也会失败。 显然,XTest.testFoo()也可能因为X.foo()特有的问题而失败。

虽然这很好,我仍然希望两个testing都运行,但如果用XTest.testFoo()指向YTest.testBar()来注释一个testing依赖项,那将会很好。 这样,可以立即看到X.foo()使用的function也失败了,什么不是。

JUnit或其他地方有这样的注释吗? 就像是:

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

JExample和TestNG有类似的东西。

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

对JUnit有一个解释: https : //github.com/junit-team/junit.contrib/tree/master/assumes

您可以在TestNG中声明testing依赖关系 ,其语法几乎与您的示例相同。 我不认为JUnit提供了类似的东西。

org.junit.FixMethodOrder

@FixMethodOrder(MethodSorters.NAME_ASCENDING)这是你的unit testing类的顶部。

你可以命名你的方法public void step1_methodName等

在行为驱动devise库jBehave中有一个关键字GivenScenarios ,它导入在主场景之前运行的场景列表。 这给定义依赖关系并有一个失败点的机会。 jBehave的日志会告诉你,如果testing在依赖关系或主体部分失败。

真的没有我知道的这样的事情。 (编辑:你每天都会学到新东西:))在我看来,这并不是什么坏事(尽pipe我可以看到它是有用的,尤其是当JUnit被用于其他forms的自动化testing时 – 例如,集成testing)。 你的testing,国际海事组织,并没有在“unit testing”这个词的最严格的意义上(至less不是X#foo()的testing)。 X#foo()testing应该成功或失败, 取决于X#foo() 。 它不应该依赖Y#foo()

我所要做的就是嘲笑Y,用非常简单的控制行为来实现像MockY#foo()这样的东西,并在X#foo()的testing中使用它。

这就是说,通过15000个testing,我可以看到这将是一个重构的痛苦。 🙂