リストを初期化します<?>でJUnitを経由@Rule

Messol:

私は、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を持っています。

Mureinik:

@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...    
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=208392&siteId=1