java JUnit -指定一个测试对其他测试的依赖性(不跳过任何一个)?

fjnneemd  于 2023-09-29  发布在  Java
关注(0)|答案(6)|浏览(101)

我们的工具包有超过15000个JUnit测试,并且如果其他测试失败,许多测试都会失败。例如,如果方法X.foo()使用Y.bar()的功能,并且YTest.testBar()失败,那么XTest.testFoo()也会失败。显然,XTest.testFoo()也可能因为www.example.com()的特定问题而失败X.foo。
虽然这很好,而且我仍然希望两个测试都运行,但是如果可以使用指向YTest.testBar()的XTest.testFoo()注解测试依赖项,那就更好了。通过这种方式,可以立即看到www.example.com()使用的功能X.foo也失败了,什么没有。
在JUnit或其他地方是否有这样的注解?例如:

public XTest {

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

}
at0kjp5o

at0kjp5o1#

JUnit还不能(在撰写本文时,2022年)。
但是JExample和TestNG都有类似的东西。

  • 所述库提供它们自己的测试运行器,所述测试运行器支持它们的依赖机制。
  • 两者都可以与JUnit一起使用(无需重写现有的类)。
  • 但TestNG似乎更有希望。

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

vwoqyblh

vwoqyblh2#

有一个对JUnit的贡献可以解决这个问题:https://github.com/junit-team/junit.contrib/tree/master/assumes

**2022年更新;**假设现在已经出来了,但这只是跳过了测试,这不是OP所要求的。

zynd9foi

zynd9foi3#

org.junit.FixMethodOrder
@FixMethodOrder(MethodSorters.NAME_ASCENDING)这位于单元测试类的顶部。
您可以将方法命名为public void step1_methodName等

2w3kk1z5

2w3kk1z54#

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

piv4azn7

piv4azn75#

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

kmbjn2e3

kmbjn2e36#

我还真没听说过这样的事(编辑:你每天都能学到新东西:))在我看来,这并不是一件坏事(尽管我可以看到它是有用的,特别是当JUnit用于其他形式的自动化测试时-例如,集成测试)。在我看来,你的测试并不是严格意义上的“单元测试”(至少不是对X#foo()的测试)。X#foo()的测试成功或失败 * 仅 * 取决于X#foo()的实现。它不应该依赖于Y#foo()
如果我是你,我会模仿Y,用非常简单、可控的行为实现类似MockY#foo()的东西,并在X#foo()的测试中使用它。
也就是说,通过15,000个测试,我可以看到重构是多么痛苦。:)

相关问题