多くの場合、単体テストでは、リソース ファイルから読み込まれ、テスト クラスの静的属性に格納されるフィクスチャがあります。
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ですか?または静的な最終リソースを初期化するためのより良い/より典型的な方法はありますか?