gpt4 book ai didi

java - JUnit 在没有 @BeforeEach 的情况下创建该类的新实例?

转载 作者:行者123 更新时间:2023-12-04 09:52:08 25 4
gpt4 key购买 nike

为了重构测试,我们被告知 JUnit 每次都会通过执行以下操作来创建类的新实例:

public class someClassTest{

final private someClass obj1 = new someClass();

@Test
public void t1() {
Assertions.assertEquals(1, obj1.returnOne());
}

@Test
public void t2() {
Assertions.assertEquals(8, obj1.return(2));
}
}

而不是使用类似的东西

@BeforeEach
void setup(){
someClass obj1 = new someClass();}

或者每次都在测试方法中初始化它。

我的问题是,我的第一个代码块为什么以及如何实现与@BeforeEach 相同的目的?

最佳答案

JUnit 框架对此进行管理。它在每次测试之前创建一个新的测试类实例 (someClassTest)。

看看这个例子:

public class SampleTest {

@Test
public void test1() {
System.out.println(this.toString());
}

@Test
public void test2() {
System.out.println(this.toString());
}
}

运行一下,你会看到test1test2中的测试类实例是不一样的,例如:

SampleTest@4e515669
SampleTest@504bae78

从这点来看,这只是 Java 的一个普通行为。如果您在对象中有一个字段,它将被重新创建(并重新初始化):

public class SampleTest {
private int i = 0;

@Test
public void test1() {
// i is 0, so lets increase and see what happens in test2
i++;
}
@Test
public void test2() {
// here i is again 0 because it was re-created, we have a different object of SampleTest

}
}

关于java - JUnit 在没有 @BeforeEach 的情况下创建该类的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61997548/

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