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;
.....
}
なぜあなたのデータメンバーは本質的に静的である必要がありますか?インスタンス変数に変換するだけであれば、自動的にこれを取得することはできません。テストメソッドを静的データメンバーに依存させることで、テストをパラレルモードで実行できなくなります。それは働くだろうか? –
@Testアノテートされたメソッド間で状態を永続化したいので、それらは静的です。 sessionIdの値は、いくつかのテストで使用する必要があります。おそらく静的ゲッターやセッターを使用して簡単ですか?おそらくtestngは変数の値をとにかく保持しているので、私はローカル変数を使うことができますか? – Steerpike