2017-09-29 6 views
0

私は@PostConstructを使用してテストを実行する前にいくつかの初期設定を行いますが、テストクラスが初期化された後ではなく、すべてのテストで@PostConstructメソッドが実行されているようです。また、コンストラクタが@PostConstructの前にすべてのテストの前に呼び出されていることもわかります。テストクラスはなぜ@Testメソッドごとに一度ではなく初期化されるのですか?@SpringRunnerは、各テストでクラスを再初期化するのはなぜですか?

私はspring-boot-starter-test:1.5.7.RELEASE

サンプルテストのセットアップ使用しています:出力、 'コンストラクタ' は二度印刷されて

@RunWith(SpringRunner.class) 
public class TestClass { 

    public TestClass() { 
     System.out.println("constructor"); 
    } 

    @PostConstruct 
    public void setup() { 
     System.out.println("setting up"); 
    } 

    @Test 
    public void test1() { 
     System.out.println("test 1"); 
    } 

    @Test 
    public void test2() { 
     System.out.println("test 2"); 
    } 
} 

を、二度印刷されて '設定'。 「テスト1」と「テスト2」が1回ずつ印刷されます。

答えて

1

これはJUnitの標準的なライフサイクルです。各テストメソッドが呼び出される前に、クラスの新しいインスタンスが作成されます。そのインスタンスを作成するには、テストクラスのコンストラクターを呼び出す必要があります。コンストラクタが呼び出されると、@PostConstructメソッドを呼び出すことは理にかなっています。

+0

うわー、これはまったく分かりませんでした。私はこれについての説明を見つけようとしていましたが、それはどこにも見つかりませんでした。私は当初、そのクラスが一度インスタンス化されたと考え、各@Testメソッドはインスタンス内で順次呼び出されていました。さて、これがJUnitの標準的なライフサイクルだとわかったので、それは完璧です。ありがとう! –

関連する問題