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:
@Rule
Sは、各テストメソッドの前にコードを実行するためのものです。あなただけのメンバーを初期化する必要がある場合は、アノテーションを付けるメソッドでは、この初期化を置きます@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...
}
}