TestNGのデータプロバイダー機能を使用しています。BeforeMethod
との間に何かが必要ですBeforeClass
。
DataProvider
呼び出しの各アイテムですが、メソッドへのアイテムの送信を開始するタイミングと、それを実行するタイミングBeforeMethod
を知りたいです。DataProvider
BeforeClass
チェーンの高すぎるようです。間に何かありますか?
TestNGのデータプロバイダー機能を使用しています。BeforeMethod
との間に何かが必要ですBeforeClass
。
DataProvider
呼び出しの各アイテムですが、メソッドへのアイテムの送信を開始するタイミングと、それを実行するタイミングBeforeMethod
を知りたいです。DataProvider
BeforeClass
チェーンの高すぎるようです。間に何かありますか?
そのようなフックはありませんが、実際のデータプロバイダーを呼び出す前にフックを呼び出す「偽の」データプロバイダーを作成することで、独自のフックを簡単に挿入できます。
@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アノテーションを検索するだけで、呼び出す必要のあるメソッドを見つけることができます。
AFAIK、そのようなフックはありません。私が考えることができる回避策は、私が最初のものであり、私が最後のものであり、プロセスを開始および終了できることを示すデータに渡されるものがある場合です。または、データ配列のサイズを保存して、増分します。 (beforemethodで)実行される各メソッドをカウントし、beforemethodsで(以前に保存されたサイズと比較して)最初と最後のカウントを確認し、必要なタスクを実行します。
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();
}
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