9

パラメータ化されたドキュメントで、「パラメータ化されたテスト クラスを実行すると、テスト メソッドとテスト データ要素の外積のためにインスタンスが作成される」という記述を見つけてイライラしました。これは、すべてのテストを実行する前ではなく、単一のテストごとにコンストラクターが 1 回実行されることを意味します。コンストラクターに入れた高価な操作 (1 ~ 5 秒) があり、操作が何度も繰り返され、テスト スイート全体が不必要に遅くなります。この操作は、すべてのテストの状態を設定するために 1 回だけ必要です。パラメータ化されたテストの 1 つのインスタンスで複数のテストを実行するにはどうすればよいですか?

4

1 に答える 1

8

コストのかかる操作を@BeforeClassメソッドに移動し、パラメータ化されたテスト全体で一度だけ実行する必要があります。

ばかげた例を以下に示します。

@RunWith(Parameterized.class)
public class QuickTest {

  private static Object expensiveObject;  
  private final int value;

  @BeforeClass
  public static void before() {
    System.out.println("Before class!");
    expensiveObject = new String("Just joking!");
  }


  @Parameters
  public static Collection<Object[]> data() {
    return Arrays.asList(new Object[][] { { 1 }, { 2 } });
  }      

  public QuickTest(int value) {
    this.value = value;
  }

  @Test
  public void test() {
    System.out.println(String.format("Ran test #%d.", value));
    System.out.println(expensiveObject);
  }
}

印刷します:

Before class!
Ran test #1.
Just joking!
Ran test #2.
Just joking!
于 2013-01-21T15:46:35.133 に答える