java - JUnit5:使多个测试对同一个对象进行操作
问题描述
我想将我的 JUnit5 测试设置为对同一个对象进行操作。我读取大文件以用作测试数据,因此我更愿意读取一次并在其余测试中使用相同的数据。
我创建了以下作为一个简单示例,我尝试使用静态对象(“列表”)来实现这一点(不起作用):
import java.util.List;
import java.util.ArrayList;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
class ExampleTest {
// Single list object to be modified and accessed by the tests
private static List<String> list = new ArrayList<String>();
@BeforeAll
static void setUpBeforeClass() throws Exception {
// None
}
@Test
final void addFoo() {
list.add("foo");
}
@Test
final void addBar() {
list.add("bar");
}
@Test
final void printList() {
System.out.println(list.toString());
assert(list.toString().equals("[foo, bar]"));
}
}
这样做的结果是 printList() 失败,其中列表为空而不是包含 [foo, bar]。
我已经能够通过将添加数据的方法移动到@BeforeAll 中来完成这项工作:
private static List<String> list;
@BeforeAll
static void setUpBeforeClass() throws Exception {
list = new ArrayList<String>();
list.add("foo");
list.add("bar");
}
但是最好将数据导入方法作为与@BeforeAll 分开的测试。
@TestInstance(TestInstance.Lifecycle.PER_CLASS) 也不起作用。
解决方案
使用@FixMethodOrder 注释。例如参考这篇文章:https ://www.mkyong.com/unittest/junit-run-test-in-a-particular-order/
推荐阅读
- sqlite - 我对重要的 sqlite3 语法有疑问
- python - 在具有容差的矩阵内查找数组
- android - 安卓。失去焦点后出现意外的淡入(暗淡)背景
- c# - GroupJoin 无需从加入列表中选择内容
- html - 如何通过网站上的链接打开信息亭模式
- java - 具有 Java JDBC 批量插入的 Oracle 数据库 - 在父级之前插入子级
- sql - 为什么不识别此 CTE?
- javascript - chrome 扩展上的 SpeechRecognition Web API 不允许错误
- python - 以表格格式加入单个字典
- python - Python - 如何将 S3 文件夹转换为 JSON 层次结构?