在JUnit
中,我想开发一个拦截测试方法的框架,比如说testA
,并在它之前调用方法beforeA()
并在之后调用afterA()
。我希望在测试运行之前使用它来准备数据并销毁它。
我不能使用常规@before
和@after
因为它们在所有测试之前和之后运行。而且我也不想将原始测试类别划分为小测试。
这是合法的还是不好,因为我们在JUnit测试方法中运行测试准备和销毁(而不是在之前/之后)?
我相信没关系,因为在任何情况下,如果我测试失败,我应该使用assert
(测试失败)而不是regular exception
(错误/例外),所以它应该没有区别只要我在测试失败时断言,测试失败/异常。
您怎么看?
答案 0 :(得分:1)
如果您想要在测试类中的某些测试之前和之后运行数据设置和清除方法,那么您可以编写这些方法并在测试中调用它们。
这种方法可以重复使用,并且可以给出适当的名称。
它们也可以被抽象为抽象的超类,因此如果你需要的话,它们可以在多个测试类中共享。
这样的事情:
public class RandomTest {
//Obviously these would need different access if moved to a super class
private void setUpScenario1TestCase() {
//Set up your test case
}
private void tearDownScenario1TestCase() {
//Clear down the test case
}
@Test
public void thatScenario1PerformsAsExpected() {
setUpScenario1TestCase();
//Perform you tests
tearDownScenario1TestCase()
}
}
就个人而言,我认为以这种方式做这件事并没有问题,在某些情况下我会建议。对于像多个模拟依赖项设置多个期望这样的事情,有时候比测试方法本身的所有期望更清晰。
测试的清晰度与测试本身一样重要。因此,具有这些特定命名的设置方法对于保持测试简洁非常有用。
我仍然认为标准@Before
和@After
很有用。例如,保证为每个测试实例化新对象,并拆除您可能已设置的任何静态测试依赖项。然而,对于特定于测试的设置,它们确实有点短暂。
答案 1 :(得分:1)
你看过JUnit Rules吗?