@MethodSource
でテストクラス内のメソッドを指定する場合、通常staticメソッドのみ指定できる。- 非staticメソッドを指定するとinitializationErrorになる
- 非staticメソッドを指定可能にするには、クラスに
@TestInstance(Lifecycle.PER_CLASS)
を付与すればOK。- 全てのテストメソッドを同じインスタンスで実行するための指定(“per-class” mode)
- デフォルトではテストメソッドごとに新しいインスタンスを生成する(“per-method” mode)
- 同じインスタンスで実行されるので、テストを跨いでインスタンスの状態は引き継がれる
@BeforeEach
,@AfterEach
で手動でリセットする必要あり。
- 全てのテストメソッドを同じインスタンスで実行するための指定(“per-class” mode)
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.stream.Stream;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class SampleTest {
public Stream<String> provider(){
return Stream.of("case1", "case2", "case3");
}
@ParameterizedTest
@MethodSource("provider")
public void test(String arg){
System.out.println(arg);
}
}
参考