web-dev-qa-db-ja.com

Spring-BootのApplication.javaをJUnitテストする方法

これは役に立たない行為のように思われるかもしれませんが、Spring-Boot(1.3.8.RELEASE)のApplication.Javaで実際にjunitテストを行う方法はありますか?応用?

下記のとおり:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {

       try{
             SpringApplication.run(Application.class, args);
       }catch(Exception e){
             //code here
       }   
    }
}

たぶん、例外をキャッチしてみることができますか?しかし、JUnitがSpringApplication.run()をテストするために、他に何をテストできますか?どんな例でも大歓迎です。皆さん、ありがとうございました!

11
R.C

通常、アプリケーションコンテキストが起動することをテストするには、次のもので十分です。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {

    @Test
    public void contextLoads() {
    }
}

ただし、Application.mainを直接テストする場合は、次の方法でもテストできます。

public class ApplicationTest {

    @Test
    public void test()
    {
        Application.main(new String[]{
                "--spring.main.web-environment=false",
                "--spring.autoconfigure.exclude=blahblahblah",
                // Override any other environment properties according to your needs
        });
    }
}
29
user1024314

たぶん、例外をキャッチしてみることができますか?しかし、JUnitがSpringApplication.run()をテストするために、他に何をテストできますか?どんな例でも大歓迎です。皆さん、ありがとうございました!

例外がキャッチされた場合にテストを失敗させることは、テスト中にスローされた例外がテストを失敗させる(より正確には)結果として既にあるため、ここでは役に立ちません。
スプリングブートコンテキスト全体(_@SpringBootTest_)をロードするテストクラスをすでに実行している場合、テストが正しくロードされていることを確認するためにテストを記述する必要はありません。

何らかのロジックがある場合は、Applicationクラスをテストする必要があります。
たとえば、コンテキストがロードされた後に何らかの処理を行う_@Before_アノテーションが付けられたメソッドを宣言し、処理が本来どおりに行われたことをアサートしたい場合があります。その他の例:main()メソッドでいくつかの引数を渡すことができ、メソッドで引数が期待どおりに使用されることをアサートしたい場合。
すべては_@SpringBootTest_でテスト可能です。

Applicationクラスが何もしない場合:

_ public static void main(String[] args) {                   
   SpringApplication.run(Application.class, args);         
 }
_

ただし、いくつかのカバレッジツールまたは組織に準拠するmain()テストメソッドをカバーし、そのための統合テストを作成し、それを明確に文書化し、Spring Bootアプリケーションには時間がかかります。これを参照できます question

1
davidxxx