TestNG DataProvider にパラメータを渡すことは可能ですか? 質問する

TestNG DataProvider にパラメータを渡すことは可能ですか? 質問する

私たちは、一連のデータ値に対していくつかのテストを実行し、それぞれに同じ条件が当てはまることを確認したいと考えています。現在、データはフラット ファイルまたは単純な Excel スプレッドシートに保存されています。

最初に考えたのは、ファイルからデータをロードし、各データ値に対してテスト メソッドを 1 回呼び出すために使用する TestNG DataProvider を作成することでした。問題は、異なるテストでは異なるファイルからデータをロードする必要があり、DataProvider にパラメーターを送信する方法が見当たらないことです。これが可能かどうか誰か知っていますか?

理想的には、コードは次のようになります (簡略化された例)。

public class OddTest {
    @DataProvider(name = "excelLoader")
    public Iterator<Object[]> loadExcelData(String fileName) {
        ...
    }

    @Test(dataProvider = "excelLoader" dataProviderParameters = { "data.xls" })
    public void checkIsOddWorks(int num)
        assertTrue(isOdd(num));
    }
}

ベストアンサー1

出典TestNGドキュメント:

@DataProvider をjava.lang.reflect.Method最初のパラメータとして を取るように宣言すると、TestNG はこの最初のパラメータに対して現在のテスト メソッドを渡します。これは、複数のテスト メソッドが同じ @DataProvider を使用し、どのテスト メソッドにデータを提供するかに応じて異なる値を返すようにしたい場合に特に便利です。

たとえば、次のコードは、@DataProvider 内のテスト メソッドの名前を出力します。

@DataProvider(name = "dp")
public Object[][] createData(Method m) {
  System.out.println(m.getName());  // print test method name
  return new Object[][] { new Object[] { "Cedric" }};
}

@Test(dataProvider = "dp")
  public void test1(String s) {
}

@Test(dataProvider = "dp")
  public void test2(String s) {
}

したがって次のように表示されます:

test1
test2

これを desolat が提供するソリューションと組み合わせて、コンテキストとそれに応じた方法からデータを決定することもできます。

    @DataProvider(name = "dp")
    public Object[][] foodp(ITestContext ctx, Method method) {
        // ...
    }

おすすめ記事