0

データ プロバイダーからの呼び出し回数が 1 の並列テストを利用したいのですが、どうすれば実現できますか?

コード例を次に示します。

public class Example {


  @Test(dataProvider = "provider", threadPoolSize = 20)
  public void test(final TestData td) {
    System.out.println(td);
    Assert.assertTrue(td.i >= 0);
  }

  @DataProvider
  public Object[][] provider() {
    final Random r = new Random(System.currentTimeMillis());
    final Object[][] data = new TestData[5][1];
    for (int i = 0; i < 5; i++) {
      data[i][0] = new TestData(r.nextInt(5), i, "test string");
    }
    return data;
  }

  private class TestData {
    public int random;
    public int creationNum;
    public String s;

    public TestData(final int random, final int creationNum, final String s) {
      this.random = random;
      this.creationNum = creationNum;
      this.s = s;
    }

    @Override
    public String toString() {
      final List<String> list = new ArrayList<>();
      for (int j = 0; j < i; j++) {
        list.add(s);
      }
      return "I = " + i + ", Creation Num: " + creationNum + ", " + StringUtils.join(list, ", ");
    }
  }
}

したがって、このテストを実行すると、creationNumber がランダムな順序で表示されることを確認したいと思います。問題は、invocationCount が指定されていない場合、threadPoolSize が無視されることです。それを提供すると、同じ TestData インスタンスが複数のテストに使用されることがわかりますが、これは望ましくありません。同じデータを複数回テストせずに、このテストをスレッド方式で実行する方法はありますか?

4

1 に答える 1

2

@DataProvider(parallel = true) を作成し、dataproviderthreadcount を使用して、生成する並列スレッドの数を制御できます。

于 2013-03-05T19:51:23.163 に答える