1

以下のように、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、すべてのデータ プロバイダー メソッドにパラメーターを追加する必要があります。

だから、私は知りたいです

  1. データ プロバイダー クラス内でインジェクションが可能かどうか。
  2. これを行うためのより良い方法はありますか?(before クラス メソッドと同様に、すべてのデータ プロバイダー メソッドに渡す必要がないように、データ プロバイダーで使用できる before メソッドはありますかITestContext)
4

0 に答える 0