私の目標は、各テストメソッドの後に自分のjavax.persistence.EntityManagerをクリアすることです。ここTestNG:次のテストメソッドの特定
は、テストクラスの例は次のとおりnew Object[2][1]
:
public class Example
{
@Test(dataProvider = "sampleDataProvider")
public void testA(String parameter)
{
System.out.println(parameter);
}
@Test(dataProvider = "sampleDataProvider")
public void testB(String parameter)
{
System.out.println(parameter);
}
}
のEntityManagerは、この形式でコンパイルされたテストデータのためのDBを照会することによってのdataProvider「sampleDataProvider」で使用されています。データのクエリとコンパイルは、@DataProviderでアノテートされたテストメソッドが実際に実行される前に行われ、実際にはStringだけでなくエンティティもクエリしていることに注意してください。
上記テストクラスはそうのように実行します:
testA("some queried entity 1")
testA("some queried entity 2")
testB("some queried entity 1")
testB("some queried entity 2")
私の最初のソリューションは、EntityManagerをクリアする@AfterTest
アノテーションを使用することでした。しかし、"some queried entity 2"
のメンバーへの読み取り/書き込み操作で問題を引き起こすtestA
とtestB
の2番目の実行(または2番目のテストインスタンス)の前に、"some queried entity 2"
をentityManagerから切り離すことになります。
私の目標は、テストメソッドの後にエンティティマネージャをクリアすることです。必ずしもテストメソッドのすべてのインスタンスの後である必要はありません。
TestNGは、次に実行するテストを知ることができますか?そうすれば、次のテストが新しいものであればentityManagerを簡単にクリアすることができます。
その他の推奨事項はありますか?
ありがとうございます。私はこれを考えました。しかし、膨大な数のテストとデータ提供者があり、それらをすべてグループ化することは非常に難しい作業です。私はTestNGがランダムな順序でテストを実行することを理解していますが、それを実行するために次のメソッドを(ランダムに)取得するメカニズムが必要です。私はそれをオーバーライドすることを考えているし、そこにEM.clear()を追加するだけです。 – jmrjulian
次に、TestListenerを実装することができます。答えを参照してください。 – Kel
ありがとう!これは良いスタートです。私はこれからどこに行くことができるか、起こりうる問題を見ていきます。 – jmrjulian