作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 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...
}
}
测试对象(不是 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() 方法
后面的第二个代码很难达到这一点,因为没有共享状态,每个对象都是本地的。
你有什么想法?合理?值得吗?
最佳答案
JUnit 为每个测试方法创建一个新的 ClassToTestTest
对象。因此没有领域可以偷偷进行另一项测试。详情:http://martinfowler.com/bliki/JunitNewInstance.html
关于java - 如何在 JUnit 测试中使用属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21627799/
我是一名优秀的程序员,十分优秀!