use*_*011 17 java testing junit unit-testing instance
目前,我正在阅读"JUnit in action"一书.在本书中,我发现了以下文字:
在调用每个@Test方法之前,JUnit会创建测试类的新实例.这有助于提供测试方法之间的独立性,并避免测试代码中的无意的副作用.因为每个测试方法都在一个新的测试类实例上运行,所以我们不能在测试方法中重用实例变量值.
现在我认为这种方法没有多大意义:
例如:
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, result, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
对于测试类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);
}
}
Run Code Online (Sandbox Code Playgroud)
对于测试类OneTest,我找到了一种方法来为许多测试方法使用相同的变量计数...
那么,如何看待书中描述的方法的真正好处呢?
Vik*_*dor 18
如何看待书中描述的方法的真正好处?
单独实例的目的不是为了任何好处,而是为了维护合同,即每个测试应该独立执行而不会影响先前测试的执行.除了为每个测试使用不同的实例之外,没有其他方法可以确保此合同.
例如,Spring事务管理确保在默认情况下通过测试回滚对数据库所做的所有更改,以维护相同的合同.
因此,通常不鼓励在测试中使用静态变量,因为它会破坏每个测试的一个实例的整个目的,以便为每个测试提供一个干净的平板.