Die*_*ado 2 java installation junit attributes unit-testing
我已经使用 JUnit 几年了,我发现了许多测试中隔离不完整的例子。
我开发的大多数测试都遵循相同的结构
class ClassToTestTest {
// Attributes
private ClassToTest objectToTest;
// Methods
@Before
public void setup() {
objectToTest = new ClassToTest();
}
@Test
public void test1() {
//do something
Assert...
}
@Test
public void test2() {
//do something
Assert...
}
}
Run Code Online (Sandbox Code Playgroud)
测试对象(不是 ClassToTest 对象,而是执行测试的对象)的内部状态在其属性中。如果 setup() 或 teardown() 方法存在任何缺陷,则 objectToTest 的某些内部状态可能会潜入其他测试。
只是想知道,没有共享状态会更好吗?你没有属性
class ClassToTestTest {
// Attributes
// No attributes, no internal state
// Methods
@Before
public void setup() {
objectToTest = new ClassToTest();
}
@Test
public void test1() {
localObjectToTest = createObjectToTest();
//do something
Assert...
}
@Test
public void test2() {
localObjectToTest = createObjectToTest();
//do something
Assert...
}
}
Run Code Online (Sandbox Code Playgroud)
我知道第一个代码和第二个代码做的差不多,但是在第一个代码中你很想做类似的事情
// Methods
@Before
public void setup() {
objectToTest = objectToTest.reset();
}
Run Code Online (Sandbox Code Playgroud)
或者更糟糕的是,依赖之前的测试,以便使用之前测试中 objectToTest 的状态来“节省”时间,最终得到一个空的 setup() 方法
遵循第二个代码很难达到这一点,因为没有共享状态,每个对象都是本地的。
你怎么看?有道理?值得吗?
JUnitClassToTestTest
为每个测试方法创建一个新对象。因此,没有任何领域可以潜入另一个测试。详情:http : //martinfowler.com/bliki/JunitNewInstance.html