0

TestNGのデータプロバイダー機能を使用しています。BeforeMethodとの間に何かが必要ですBeforeClass

DataProvider呼び出しの各アイテムですが、メソッドへのアイテムの送信を開始するタイミングと、それを実行するタイミングBeforeMethodを知りたいです。DataProvider

BeforeClassチェーンの高すぎるようです。間に何かありますか?

4

4 に答える 4

2

そのようなフックはありませんが、実際のデータプロバイダーを呼び出す前にフックを呼び出す「偽の」データプロバイダーを作成することで、独自のフックを簡単に挿入できます。

@DataProvider
public Object[][] fakeDp() {
    // invoke before data provider method
    result = invokeRealDataProvider();
    // invoke after data provider method
    return result
}

@Test(dataProvider = "fakeDp") { ... }

実装に関しては、独自の@BeforeDataProviderアノテーションを作成し、これをfakeDp()で自分で検索し、テストメソッドで指定することができます。

@RealDataProvider(dataProvider = "realDp")
@Test(dataProvider = "fakeDp") { ... }

次に、fakeDp()は、@ RealDataProviderアノテーションを検索するだけで、呼び出す必要のあるメソッドを見つけることができます。

于 2013-01-15T17:19:40.480 に答える
1

AFAIK、そのようなフックはありません。私が考えることができる回避策は、私が最初のものであり、私が最後のものであり、プロセスを開始および終了できることを示すデータに渡されるものがある場合です。または、データ配列のサイズを保存して、増分します。 (beforemethodで)実行される各メソッドをカウントし、beforemethodsで(以前に保存されたサイズと比較して)最初と最後のカウントを確認し、必要なタスクを実行します。

于 2013-01-15T12:26:45.440 に答える
0

BeforeClassはあなたの最良の選択肢のようです。テストをグループで呼び出したい場合は、BeforeClassの範囲を狭めることができます。

 @BeforeClass(groups = "dataProvider")
 public void dataProviderBeforeMethod() {
   //do something
 }
 @Test(groups = "dataProvider", dataProvider = "dataProviderClass", threadPoolSize = 10)
 public void testWithdataProvider(){
   //test something
 }
 @DataProvider(name = "dataProviderClass", parallel = true)
 private Iterator<Object[]> dataProviderClass() {
   List<Object[]> myData = new ArrayList<>();
     //setup data
   return myData.iterator();
 } 
于 2016-09-13T20:33:42.660 に答える
0

IDataProviderListenerを使用して、DataProviderメソッドの開始/終了を追跡してください。IDataProviderListenerは、トピックスターターが必要とすることを正確に実行しているように見えます。IDataProviderListenerには、beforeDataProviderExecutionとafterDataProviderExecutionの2つのメソッドがあります。beforeDataProviderExecutionは、TestNgが実行のためのメソッドを準備するときに呼び出され、afterDataProviderExecutionは、実行の準備ができたすべてのテストの後で(テストが開始される前に)呼び出されます。例:

import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners(CustomDataProviderListener.class)
public class demo {

    @DataProvider
    public Object[] integerDataProvider() {
        return new Integer[]{1, 2};
    }

    @Test(dataProvider = "integerDataProvider")
    public void test1(Integer value) {
        System.out.println(value);
    }
}

import org.testng.IDataProviderListener;
import org.testng.IDataProviderMethod;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;

public class CustomDataProviderListener implements IDataProviderListener {
    @Override
    public void beforeDataProviderExecution(IDataProviderMethod iDataProviderMethod, ITestNGMethod iTestNGMethod, ITestContext iTestContext) {
        System.out.println("CustomDataProviderListener -> beforeDataProviderExecution");
    }

    @Override
    public void afterDataProviderExecution(IDataProviderMethod iDataProviderMethod, ITestNGMethod iTestNGMethod, ITestContext iTestContext) {
        System.out.println("CustomDataProviderListener -> afterDataProviderExecution");
    }
}


output:
CustomDataProviderListener -> beforeDataProviderExecution 
CustomDataProviderListener -> afterDataProviderExecution 

1
2
于 2021-02-22T11:22:11.623 に答える