为了账号安全,请及时绑定邮箱和手机立即绑定

通过@Rule 在 JUnit 中初始化 List<?>

通过@Rule 在 JUnit 中初始化 List<?>

泛舟湖上清波郎朗 2021-05-31 21:17:34
我正在编写一个 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当我简单地初始化 aMySQLContainer而不是List<MySQLContainer>.为什么这不起作用?我该如何解决?我的依赖项中有 JUnit 4.12。
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

@Rules 用于在每个测试方法之前执行代码。如果你只需要初始化一个成员,把这个初始化放在一个用@Before以下注释的方法中:


public class MyTest {    

    private List<MySQLContainer> containers;


    @Before

    public void initContainers() {

        containers =  = Arrays.asList(new MySQLContainer("5.5"), new MySQLContainer("5.6"));

    }


    @Test

    public void myTest() {

        // Some test...    

    }

}


查看完整回答
反对 回复 2021-06-02
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

尝试使用 ArrayList()

    public List<MySQLContainer> tests = new ArrayList();


查看完整回答
反对 回复 2021-06-02
?
月关宝盒

TA贡献1772条经验 获得超5个赞

删除@Rule,一切都很好。


public class MyTest {


    private final List<MySQLContainer> tests = Arrays.asList(

        new MySQLContainer("5.5"),

        new MySQLContainer("5.6")

    );


    @Test

    public void myTest() {


    }

}

@Rule 用于 JUnit 4 扩展,可以做一些更复杂的事情。


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信