7

私は単体テストが初めてです。JUnit 4@Beforeでアノテーションを使用する目的について。私はそれを使用するポイントを知りません:

public class FoodTestCase {
    static private Food sandwich;

    @BeforeClass
    public static void initialise(){
        sandwich = new Sandwich();    
    }

}

public class FoodTestCase {
    static private Food sandwich = new Sandwich();

}

違いは何ですか?

4

7 に答える 7

3

この場合、初期化は非常に簡単なので、必要ないかもしれません。

ロギング、複雑な初期化、またはリソースを解放する必要がある場合は、@ BeforeClassと@AfterClassを使用する必要があります。

于 2013-06-12T08:01:58.720 に答える
2

@AfterClass を使用してリソースを解放します。次に、 @BeforeClass を使用してそれらを取得するのが論理的です。静的ブロックを使用する必要があると開発者に推測させるのは得策ではない可能性があるためです。

于 2013-06-12T08:24:06.813 に答える
2

ほとんど違いはありません。ただし、コンストラクターがSandwich例外をスローする場合、直接初期化することはできず、初期化をブロックstatic private Food sandwich = new Sandwich();でラップする必要があります。try/catchただし、メソッドinitialise()は として宣言される可能性があるthrows MyExceptionため、初期化中に実際に例外がスローされた場合、テスト ケースは失敗します。

于 2013-06-12T08:04:08.443 に答える
0

あなたの特定の例では、それほど多くはありません。ただし、クラス内のすべてのテストの前に実行される @Before アノテーションもあります。http://selftechy.com/2011/05/17/junit4-before-vs-beforeclass-after-vs-afterclassを見てください。そこではよく説明されています。

于 2013-06-12T08:02:57.053 に答える
0

継承は別のしわを追加します。

共通の基本クラスを拡張する 2 つの JUnit テストがあるとします。そして、基本クラスに静的初期化ブロックとメソッドの両方があるとしましょう@BeforeClass。この場合、静的初期化ブロックは1 回実行され、@BeforeClassメソッドは2 回実行されます。

したがって、共通の基本クラスを共有する一連のテスト ケース全体にわたって設定する必要がある非常に高価な計算またはリソースがある場合は、そのために静的初期化ブロックを使用できます。

于 2015-07-10T21:05:23.617 に答える