如何解决JUnit:调用每个@Test方法之前的新实例有什么好处?
如何看书中所述方法的真正好处?
单独实例的目的不是为了任何好处,而是为了保持合同,即每个测试应独立执行而不会影响先前测试的执行。除了为每个测试使用不同的实例之外,没有其他方法可以确保此合同。
例如,Spring事务管理确保默认情况下回滚测试对数据库所做的所有更改,以维护相同的合同。
因此,通常不建议在测试中使用静态变量,因为这样做会破坏每个测试一个实例的整体目的,即为每个测试提供一个清晰的表述。
解决方法
目前,我正在阅读“ JUnit in action”一书。在这本书中,我发现以下内容:
JUnit会在调用每个@Test方法之前创建测试类的新实例。这有助于提供测试方法之间的独立性,并避免测试代码中的意外副作用。因为每个测试方法都在新的测试类实例上运行,所以我们无法在所有测试方法之间重用实例变量值。
现在,我看不出这种方法有什么意义:
例如:
public class CalculatorTest {
@Test
public void testAdd_1() {
Calculator calculator = new Calculator();
double result = calculator.add(1,1);
assertEquals(2,result,0);
}
@Test
public void testAdd_2() {
Calculator calculator = new Calculator();
double result = calculator.add(2,2);
assertEquals(4,0);
}
}
对于测试类CalculatorTest,没有任何好处。
好吧,让我们关注另一个例子:
public class OneTest {
static byte count;
public OneTest() {
count++;
}
@Test
public void test1() {
System.out.println(count);
}
@Test
public void test2() {
System.out.println(count);
}
}
对于测试类OneTest,我找到了一种对许多测试方法使用相同的变量计数的方法。
那么,如何看待书中所述方法的真正好处呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。