2017-01-04 5 views
2

TestNGを使用してAPIをテストする自動テストを作成しました。TestNGテストクラスの完了時に変数値をnullにリセットする方法

public class EndToEndTest { 

private ResponseParser response; 
private static String sessionId; 
private static float cardCharge; 

@BeforeClass 
public void setUp() { 
    baseURI = getUri(); 
    response = new ResponseParser(); 

@Test 
@Parameters({"login", "username", "password"}) 
public void testOne(){ 

//send some test data into API using specific test data parameters 

sessionId = response.getSessionId(); 
cardCharge = response.getCardCharge(); 

//assertion etc... 
    } 

@Test 
public void testTwo() 
Request req = new Request.RequestBuider() 
    .withSession(sessionId) 
    .withCardCharge(cardCharge) 
    .with....etc... 
} 

このテストは、個々のテストデータを提供する10個ほどの個別のテスト用XMLファイル(本質的に10個のテスト)に対するテンプレートです。私は1つのtestng suite xmlファイルを使って10のtestng xmlファイルを実行しています。

「テスト」が終了したら、「sessionId」などの変数をnullにリセットします。私がそれらを実行している方法では、変数値は@Tests(望ましい)の間に残っていますが、おそらくクラスで実行されているため、スコープに残り、GCに適さないため、クラスレベルでも存続します。

@AfterClassメソッドのように、それぞれをnullにリセットするよりも、よりエレガントで堅牢なソリューションがありますか?

@AfterClass 
public void tearDown(){ 

sessionId = null; 
..... 
} 
+0

なぜあなたのデータメンバーは本質的に静的である必要がありますか?インスタンス変数に変換するだけであれば、自動的にこれを取得することはできません。テストメソッドを静的データメンバーに依存させることで、テストをパラレルモードで実行できなくなります。それは働くだろうか? –

+0

@Testアノテートされたメソッド間で状態を永続化したいので、それらは静的です。 sessionIdの値は、いくつかのテストで使用する必要があります。おそらく静的ゲッターやセッターを使用して簡単ですか?おそらくtestngは変数の値をとにかく保持しているので、私はローカル変数を使うことができますか? – Steerpike

+0

タグ内のテストで永続化したい場合は、Reporter.getCurrentTestResult()。getTestContext()。setAttribute();を使用してITestContext(タグを表す)の属性として永続させないでください。 @Testメソッドの中から。それは働くだろうか? –

答えて

-1

あなたは@BeforeTest@AfterTest注釈に見ていましたか? [TestNg documentation] [1] http://testng.org/doc/documentation-main.html

+0

はい、ありがとうございますが、私はこれをテストレベルでやりたくありません。 @AfterClassではどこに、どのようにして良いのか分かりたいと思っています。 – Steerpike

0

はい、これを実行する別の方法があります。 @Testクラスをオーバーライドして、その動作を操作できます。ここでは、使用されているすべての変数にデフォルト値を設定できます。 を参照してください。 http://www.javatpoint.com/custom-annotation

関連する問題