我一直在使用JUnit几年,并且发现了很多例子,其中测试中的隔离并不完整。如何在JUnit测试中使用属性?
大多数I开发的试验遵循相同的结构
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...
}
}
测试对象(不是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...
}
}
我所知道的第一个代码做的是几乎比第二相同,但在第一个代码,你禁不住要像做
// Methods
@Before
public void setup() {
objectToTest = objectToTest.reset();
}
或更糟的是,依靠先前的测试是为了使用前一次测试中的objectToTest的状态来“节省”时间,并最终得到一个空的setup()方法
继第二个代码很难达到这一点,因为存在没有共享状态,每个对象都是本地的。
你的想法是什么?合理?它值得吗?
哇!我不知道。谢谢,相当丰富。 似乎TestNG不这么做。很高兴知道。 –