java - JUnit 在没有@BeforeEach 的情况下创建一个新的类实例?
问题描述
为了重构测试,我们被告知 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());
}
}
运行它,你会看到测试类实例在 and 中是不同的test1
,test2
例如:
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
}
}
推荐阅读
- azure-resource-manager - ARM 模板 - 解释参数部分下的“参考:{}”属性
- javascript - 在反应下拉组件中创建子标题
- html - 我可以在我的产品页面上“隐藏”这些变体框线吗?使用 Shopify Lite 购买按钮
- c++ - IMFSourceResolver::CreateObjectFromByteStream 返回 E_NOTIMPL
- node.js - 将服务器部署到heroku dev和prod
- ios - 如何弹出导航视图并返回上一个视图而不是根视图 SwiftUI?
- c# - 自动按照约定映射与拥有的实体相结合
- amazon-web-services - Docker-compose 开始失败,没有对代码库进行任何更改
- javascript - Flex 不会扩展 div 的内容以适应 div 的全宽
- python - 在python中的多个列上循环和融化?