以下のように、Test クラスと別のデータ プロバイダー クラスがあります。私のテスト クラスは extendsAbstractTestNGSpringContextTests
であるため、テスト クラスに変数を挿入できます。しかし、データ プロバイダー クラス内に変数を挿入しようとすると、機能しません。(私はそれを拡張しようとさえしました AbstractTestNGSpringContextTests
)。デバッグ中に、テスト クラスのインスタンス化中にのみオートワイヤリングが発生していることがわかりました。
@Test(dataProviderClass = MyDataProvider.class)
public class MyTest extends AbstractTestNGSpringContextTests{
@Inject
XYZ x; //works
@Test(dataProvider = "dataSet1")
public void testMethod1(){
//
}
}
public class MyDataProvider {
@Inject
XYZ x;// not working
@DataProvider
public Object[][] dataSet1(){
//
}
}
次に、属性をに設定してそれをやろうとしましたITestContext
@Test(dataProviderClass = MyDataProvider.class)
public class MyTest extends AbstractTestNGSpringContextTests{
@Inject
XYZ x;
@BeforeClass
public void beforeClass(ITestContext context){
context.setAttribute("x",x);
}
@Test(dataProvider = "dataSet1")
public void testMethod1(){
//
}
}
public class MyDataProvider {
@DataProvider
public Object[][] dataSet1(ITestContext context){
XYZ x = (XYZ) context.getAttribute("x");
}
}
上記の方法は機能しますが、回避策のように見えます。またITestContext
、すべてのデータ プロバイダー メソッドにパラメーターを追加する必要があります。
だから、私は知りたいです
- データ プロバイダー クラス内でインジェクションが可能かどうか。
- これを行うためのより良い方法はありますか?(before クラス メソッドと同様に、すべてのデータ プロバイダー メソッドに渡す必要がないように、データ プロバイダーで使用できる before メソッドはありますか
ITestContext
)