【发布时间】:2018-07-17 20:27:43
【问题描述】:
我正在编写一个 JUnit 测试用例。我想初始化一个列表对象。为简洁起见,让我们初始化一个 String 对象列表:
public class MyTest {
@Rule
public List<MySQLContainer> tests = Arrays.asList(new MySQLContainer("5.5"), new MySQLContainer("5.6"));
@Test
public void myTest() {
}
}
执行时出现以下运行时错误:
org.junit.internal.runners.rules.ValidationError: The @Rule 'tests' must implement MethodRule or TestRule.
at org.junit.internal.runners.rules.RuleMemberValidator$FieldMustBeARule.validate(RuleMemberValidator.java:234)
at org.junit.internal.runners.rules.RuleMemberValidator.validateMember(RuleMemberValidator.java:99)
at org.junit.internal.runners.rules.RuleMemberValidator.validate(RuleMemberValidator.java:93)
at org.junit.runners.BlockJUnit4ClassRunner.validateFields(BlockJUnit4ClassRunner.java:196)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:1
当我简单地初始化 MySQLContainer 而不是 List<MySQLContainer> 时,我没有收到此类错误。
为什么这不起作用?我该如何解决?
我的依赖项中有 JUnit 4.12。
【问题讨论】:
-
你为什么还需要
@Rule注释呢?你到底想达到什么目的? -
在我的情况下,我正在初始化来自 TestContainers 项目的
MySQLContainer实例。我会编辑我的帖子。 -
这看起来仍然像一个常量列表。为什么你需要
@Rule? -
我想要
@Rule背后的功能。我希望 MySQL 容器在每次测试之前初始化。我知道这是@Rule的目标?
标签: java junit junit4 junit-rule