5

いくつかのテストメソッドで拡張されたテストクラスjunit.framework.TestCaseがあります。各メソッドはサーバーへのHTTP接続を開き、リクエストとレスポンスのjson文字列を交換します。1つのメソッドは、後続のリクエストで使用する必要があるUID(sessionIdと同様)という文字列でレスポンスを取得します。サーバーに。

以前はその文字列をファイルに書き込んでいて、次のリクエストでそのファイルを文字列として読み取りました。一度に1つのメソッドを実行しています。現在、ファイル操作なしでその文字列を使用しようとしています。hastableを維持しました(UIDが多いため)目的のためにインスタンス変数としてテストクラスで)を追跡しますが、静的ブロックが毎回実行されているため、最終的に各メソッド呼び出しでクラスがロードされていることがわかりました。これにより、これらのUIDが失われます。

ファイルに書き込んだり、ファイルから読み取ったりせずにこれを実現するにはどうすればよいですか?

見出しが私の要件に一致するかどうか疑問です。誰かがそれに応じて編集してください。

4

2 に答える 2

7

各テストはテストクラスの独自のインスタンスを取得するため、このための静的変数が必要になります。

次のパターンを使用します。

private static String uuid;

private void login() {
    // Run this only once
    if (null != uuid) return;

    ... talk to your server ...
    uuid = responseFromServer.getUuid();
}

@Test
public void testLogin() {
    login();
    assertNotNull( uuid );
}

@Test
public void someOtherTest() {
    login();

    ... test something else which needs uuid ...
}

@Test
public void testWithoutLogin() {
    ... usual test code ...
}

このアプローチによりlogin()、それを必要とするテストごとに呼び出され、独自にテストされ、各テストを個別に実行できるようになります。

于 2012-07-10T09:56:32.330 に答える
6

JUnitは、テストごとにクラスの新しいインスタンスを作成します。したがって、 @ BeforeClass注釈付き静的メソッドを使用して、この情報をクラスに対して静的として設定および保存する必要があります。

詳細については、このSOの回答を参照してください。

于 2012-07-10T09:58:06.787 に答える