0

多くの場合、単体テストでは、リソース ファイルから読み込まれ、テスト クラスの静的属性に格納されるフィクスチャがあります。

public class TestFoo {

    private static String fileContents;

    @BeforeClass
    public static void setup() throws IOException {
        fileContents = ... read TestFoo.class.getResourceAsStream("filename") ... 
    }   
}

これは機能しますが、私が抱えている問題は、あるテストケースが別のテストケースの出力に影響を与える可能性があるため、テストで非最終的な静的データを一般的に好まないことです (上記の例では、1 つのテストが再割り当てされた場合fileContents)フィクスチャ データを使用する他のテストで副作用が発生する可能性があります)。

ただし、最終修飾子を追加すると、宣言時に代入が発生する必要があります。これは、初期化が自明でない場合に問題になります (上記の例のように、初期化コードによってチェック済み例外がトリガーされる可能性があります)。別の方法は、静的初期化ブロックを使用することです。

public class TestFoo {

    private final static String fileContents;
    static {
        try {
            fileContents = ... read TestFoo.class.getResourceAsStream("filename") ...
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

しかし、try/catch を書かなければならないという冗長さのため、私はこのアプローチが特に好きではありません。

どちらのアプローチがより一般的/慣用的なJavaですか?または静的な最終リソースを初期化するためのより良い/より典型的な方法はありますか?

4

1 に答える 1

1

@BeforeClass冗長性が低いため、使用します。誰かが誤って値を上書きする恐れがある場合は、 を使用することもできます@Before。ファイルが非常に大きい場合を除き、実行時のオーバーヘッドはおそらく無視できます。

于 2013-10-31T21:03:41.900 に答える