2011-01-18 9 views
2

私の目標は、各テストメソッドの後に自分の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"のメンバーへの読み取り/書き込み操作で問題を引き起こすtestAtestBの2番目の実行(または2番目のテストインスタンス)の前に、"some queried entity 2"をentityManagerから切り離すことになります。

私の目標は、テストメソッドの後にエンティティマネージャをクリアすることです。必ずしもテストメソッドのすべてのインスタンスの後である必要はありません。

TestNGは、次に実行するテストを知ることができますか?そうすれば、次のテストが新しいものであればentityManagerを簡単にクリアすることができます。

その他の推奨事項はありますか?

答えて

0

次のテスト方法を取得する簡単な方法についてはわかりません。 「あなたは@TestアノテーションdependsOnMethodsまたはdependsOnGroupsパラメータで明示的に指定するまでのテストのため開始がTestNGので保証されていないことを

@Test(groups = {"groupA"}) 
public void testA(...) { ... } 

@Test(groups = {"groupB"}) 
public void testB(...) { ... } 

@AfterGroups(groups = {"groupA"}) 
public void afterGroupA() { 
    // clear entity manager here 
} 

は注意、、、または:ところで、あなたは@AfterGroupsアノテーションを使用して同じ結果を得ることができますtestng.xmlファイル内のタグの "preserve-order"属性を使用します。

UPDATE

別の方法として、あなたはTestListiner独自のものを使用することができます。必要ならば、消去を行うonTestStart()メソッドを実装することができます。 AFAIU、呼び出されたテストメソッドは、部分的に満たされたITestResultで使用できます。ところで、暗黙のテストロジック(テストコードからのクリアは表示されません)によって引き起こされる問題につながる可能性があります。

+0

ありがとうございます。私はこれを考えました。しかし、膨大な数のテストとデータ提供者があり、それらをすべてグループ化することは非常に難しい作業です。私はTestNGがランダムな順序でテストを実行することを理解していますが、それを実行するために次のメソッドを(ランダムに)取得するメカニズムが必要です。私はそれをオーバーライドすることを考えているし、そこにEM.clear()を追加するだけです。 – jmrjulian

+0

次に、TestListenerを実装することができます。答えを参照してください。 – Kel

+0

ありがとう!これは良いスタートです。私はこれからどこに行くことができるか、起こりうる問題を見ていきます。 – jmrjulian

関連する問題