gpt4 book ai didi

java - 如何在 JUnit 测试中使用属性?

转载 作者:行者123 更新时间:2023-11-29 05:29:29 26 4
gpt4 key购买 nike

我已经使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com