2011-07-26 100 views
10

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

+0

为什么不用'@ org.junit.After'注释拆解方法? – Constantiner

+0

@Constantiner因为它只是一个After方法的所有测试。我必须为每个测试运行自己的拆解。 – Daniel

+1

@Daniel,将测试放在单独的测试用例中,并进行专门的拆解。 – Constantiner

回答

30

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

这样注释的全套是:

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

我刚刚意识到我可能没有理解这个问题。如果你问如何到特定的拆解方法对特定@Test方法联系起来,没有必要注释:只需在最后调用它在您的测试方法的末尾:

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

谢谢。这是我需要的。 – Daniel

+0

这不是最佳选择,因为您必须为每种测试方法重复此代码。 –

+0

最后一个例子只是为了涵盖对这个问题的可能解释 - 我个人很少这样做,但它是不同的@Tests的不同拆解方法的最简单的选择。 – Bohemian

4

分组点同一班级的测试方法可以共享一些东西,包括具有相同的设置和拆卸。所以,是的,你可以为每个测试定义单独的拆解,但是你可以通过将@Test方法放在不同的类中来实现。

一旦你开始有单独的拆解方法,你为什么想要将这些测试分组在一起的原因并不明显。所以你可以通过灵活地处理你在课堂上对你的测试进行分组来处理这种情况。

+0

是的,你可以考虑在你的'@ Test'方法中放置安装和拆卸代码。但是,请注意,即使抛出异常,通过使用'try' ...'finally'来调用拆卸代码。 – Raedwald

+1

@Raedwald:是的,波希米亚的方法是这样做的一种方式,但是你失去了框架的一些力量,因为现在你必须添加一个finally块。 –

1

在JUnit中没有简单的方法来做到这一点。使用TestNG,你可以将你的方法放在组中,这样你就可以定义特定的@ BeforeMethod/@ AfterMethod,它只能运行在特定的组上。

相关问题