1

テスト用にデータ プロバイダーの遅延読み込みを実行しようとしていますが、機能していません。以下は、ファクトリ アノテーション付きメソッドのコード スニペットです。

import java.util.Iterator;

import org.testng.annotations.AfterClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;

public class TF
{
    @DataProvider(name="TestInstances")
    public static Iterator<Object> testInstancesDP()
    {
        return new Iterator<Object>()
        {
            int counter=1;
            int MAX;
            {
                MAX=4;
            }

            @Override
            public boolean hasNext()
            {
                return counter<=MAX;
            }

            @Override
            public Object next()
            {
                System.out.println("passing "+counter+" iterator instance");
                return new Object[] {counter++};
            }

            @Override
            public void remove()
            {
                //TODO: IllegalOperationException
            }
        };
    }

    private int order;

    @Factory(dataProvider="TestInstances",dataProviderClass=TF.class)
    public TF(int order)
    {
        this.order=order;
        System.out.println("TF Instance created : "+order);
    }

    @DataProvider
    public Iterator<Object> testDataProvider()
    {
        return new Iterator<Object>()
        {
            int counter=1;
            int MAX;
            {
                MAX=TF.this.order;
            }

            @Override
            public boolean hasNext()
            {
                return counter<=MAX;
            }

            @Override
            public Object next()
            {
                System.out.println("passing "+counter+" as DP");
                return new Object[] {"DP"+counter++};
            }

            @Override
            public void remove()
            {
                //TODO: IllegalOperationException
            }

        };
    }

    @Test(dataProvider="testDataProvider")
    public void testStepExecutor(String str)
    {
        System.out.println("Test method execution : "+str);
    }

    @AfterClass
    public void tearDown()
    {
        System.out.println("Tear Down: "+this.order);
    }

    /**
     * @return the order
     */
    public int getOrder()
    {
        return order;
    }
}
  • 実際の出力:

    1 イテレータ インスタンスを渡す TF インスタンスが作成される: 1 2 イテレータ インスタンスを渡す TF インスタンスが作成される: 2 3 イテレータ インスタンスを渡す TF インスタンスが作成される: 3 4 イテレータ インスタンスを渡す TF インスタンスが作成される: 4 [TestNG] 実行中: コマンド ライン スイート

    DP として 1 を渡す テスト メソッドの実行: DP1 Tear Down: 1 DP として 1 を渡す テスト メソッドの実行: DP1 DP として 2 を渡す テスト メソッドの実行: DP2 Tear Down: 2 DP として 1 を渡す テスト メソッドの実行: DP1 DP として 2 を渡す テスト メソッド実行 : DP2 DP として 3 を渡す テスト メソッド実行 : DP3 Tear Down: 3 DP として 1 を渡す テスト メソッド実行 : DP1 DP として 2 を渡す テスト メソッド実行 : DP2 DP として 3 を渡す テスト メソッド実行 : DP3 DP として 4 を渡す テスト メソッド実行:DP4ティアダウン:4

    ============================================== コマンドラインスイート

    実行されたテストの合計: 10、失敗: 0、スキップ: 0

  • 期待される出力

    1 反復子インスタンス TF を渡す 作成されたインスタンス: 1 DP として 1 を渡す テスト メソッドの実行: DP1 Tear Down: 1 2 反復子インスタンス TF を渡す 作成されたインスタンス: 2 DP として 1 を渡す テスト メソッドの実行: DP1 DP として 2 を渡す テスト メソッドの実行: DP2 Tearダウン: 2 は 3 反復子インスタンスを渡します TF インスタンスが作成されました: 3 DP として 1 を渡します テスト メソッドの実行: DP1 は DP として 2 を渡します テスト メソッドの実行: DP2 DP として 3 を渡します テスト メソッドの実行: DP3 : DP として 1 を渡す 4 テスト メソッドの実行 : DP1 DP として 2 を渡す テスト メソッドの実行 : DP2 DP として 3 を渡す テスト メソッドの実行 : DP として 4 を渡す DP3 テスト メソッドの実行 : DP4 Tear Down: 4 [TestNG] 実行中: コマンド ライン スイート

    ============================================== コマンドラインスイート

    実行されたテストの合計: 10、失敗: 0、スキップ: 0

これは TestNG 実装のバグですか、それとも Factory では遅延読み込みがサポートされていません.. TIA

4

1 に答える 1