setUp()とsetUpBeforeClass()の違い


159

JUnitでユニットテストを行う場合、似た2つの方法がsetUp()ありsetUpBeforeClass()ます。これらの方法の違いは何ですか?また、違いは何であるtearDown()とはtearDownAfterClass()

署名は次のとおりです。

@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

回答:


204

@BeforeClassそして@AfterClass、何が実行される前に、全体としてテストの非常に最初と最後に-注釈付きメソッドは、テスト実行中に一度だけ実行されます。実際、これらはテストクラスが構築される前に実行されるため、宣言する必要がありますstatic

@Beforeおよび@After方法は、すべてのテストケースの前と後に実行されるので、おそらくテスト実行中に複数回実行されます。

したがって、クラスに3つのテストがあると仮定すると、メソッド呼び出しの順序は次のようになります。

setUpBeforeClass()

  (Test class first instance constructed and the following methods called on it)
    setUp()
    test1()
    tearDown()

  (Test class second instance constructed and the following methods called on it)
    setUp()
    test2()
    tearDown()

  (Test class third instance constructed and the following methods called on it)
    setUp()
    test3()
    tearDown()

tearDownAfterClass()

15

「BeforeClass」は、テストケースの静的初期化子と考えてください。静的データを初期化するために使用します。テストケースによって変化しないものです。スレッドセーフでない静的リソースには注意が必要です。

最後に、「AfterClass」アノテーション付きメソッドを使用して、「BeforeClass」アノテーション付きメソッドで行ったセットアップをクリーンアップします(自己破壊が十分に良好でない場合)。

「前」と「後」は、単体テスト固有の初期化用です。私は通常、これらのメソッドを使用して、依存関係のモックを初期化/再初期化します。明らかに、この初期化は単体テストに固有ではなく、すべての単体テストに一般的です。


ところであなたがユニットテストを書き始めているなら、私は私のブログからこのポットをお勧めします。それだけでなく、ユニットテストの他の偉大な材料へのポインタを持っていますmadhurtanwani.blogspot.com/search/label/mock
madhurtanwani

7

setUpBeforeClassは、コンストラクターの直後のメソッド実行の前に実行されます(1回だけ実行)

setUpは各メソッドの実行前に実行されます

tearDownは各メソッドの実行後に実行されます

tearDownAfterClassは、他のすべてのメソッドの実行後に実行され、実行される最後のメソッドです。(デコンストラクターを1回だけ実行)


5

Javadocから:

いくつかのテストでは、(データベースへのログインのように)計算量の多い設定を共有する必要がある場合があります。これはテストの独立性を損なう可能性がありますが、必要な最適化である場合もあります。public static void引数のないメソッドにアノテーションを付ける@BeforeClassと、クラス内のテストメソッドの前に1回実行されます。@BeforeClassスーパークラスのメソッドは、現在のクラスの前に実行されます。


違いは、setUpBeforeClassがテストの前に実行され、1回実行されることです。setUpは、各テストの前に1回実行されます(通常、テスト間でテスト状態を既知の適切な値にリセットするために使用されます)。
構文
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.