【问题标题】:Different teardown for each @Test in jUnitjUnit中每个@Test的不同拆解
【发布时间】:2011-07-26 12:56:06
【问题描述】:

有没有办法为 jUnit 中的每个 @Test 定义不同的拆解?

【问题讨论】:

  • 为什么不直接用@org.junit.After注释拆卸方法?
  • @Constantiner 因为它只是所有测试的一种 After 方法。而且我必须为每个测试运行它自己的拆解。
  • @Daniel,将测试放在单独的测试用例中,并带有专门的拆解。

标签: java junit junit4


【解决方案1】:

使用@After 注释来指示要在每个@Test 之后运行的方法。

像这样的全套注释是:

  • @BeforeClass - 在所有 @Tests 运行之前
  • @Before - 在每个 @Test 运行之前
  • @After - 在每个 @Test 运行之后
  • @AfterClass - 毕竟@Tests 都运行了

我刚刚意识到我可能没有理解这个问题。如果您询问如何将特定的拆卸方法与特定的 @Test 方法相关联,则无需注释:只需在 finally 中的测试方法末尾调用它:

@Test
public void someTest() {
    try {
        // test something
    } finally {
        someParticularTearDown();
    }
}

【讨论】:

  • 这并不完全是最佳的,因为您必须为每种测试方法重复此代码。
  • 最后一个例子只是为了涵盖对问题的可能解释——我个人很少这样做,但它仍然是我能想到的最简单的选择,因为它可以为不同的@Tests 提供不同的拆卸方法。
  • 使用 try-finally 进行拆解有一个缺点;如果您的正常 junit 设置截取屏幕截图或记录应用程序状态,则在运行 finally 代码之前不会发生这种情况,即它不会在发生故障时捕获应用程序的状态。
【解决方案2】:

将测试方法分组到同一个类中的目的是让它们可以共享内容,包括具有相同的设置和拆卸。所以,是的,您可以为每个测试定义单独的拆解,但您可以通过将 @Test 方法放在不同的类中来实现。

一旦您开始使用单独的拆解方法,您为什么要将测试分组到同一个类中的理由就不明显了。因此,您可以通过灵活地在类中对测试进行分组来管理这种情况。

【讨论】:

  • 是的,请考虑将设置和拆卸代码放在您的 @Test 方法中。但是,请注意使用try...finally,即使抛出异常也会调用拆卸代码。
  • @Raedwald:是的,Bohemian 的方法是做到这一点的一种方法,但是你失去了框架的一些力量,因为现在你必须添加一个 finally 块。
【解决方案3】:

在 JUnit 中没有简单的方法可以做到这一点。使用TestNG,您可以将您的方法分组,这样您就可以定义特定的@BeforeMethod/@AfterMethod,只在某些组中运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2012-12-03
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多