メモ置き場

非staticメソッドを@MethodSourceで指定する

  • @MethodSourceでテストクラス内のメソッドを指定する場合、通常staticメソッドのみ指定できる。
    • 非staticメソッドを指定するとinitializationErrorになる
  • 非staticメソッドを指定可能にするには、クラスに@TestInstance(Lifecycle.PER_CLASS)を付与すればOK。
    • 全てのテストメソッドを同じインスタンスで実行するための指定(“per-class” mode)
      • デフォルトではテストメソッドごとに新しいインスタンスを生成する(“per-method” mode)
    • 同じインスタンスで実行されるので、テストを跨いでインスタンスの状態は引き継がれる
      • @BeforeEach, @AfterEachで手動でリセットする必要あり。
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);
    }
}

参考