2017-05-01 21 views
1

私はスプリングブート以外のWebアプリケーションを持っています。JUnitテストの@SpringBootApplicationアノテーションの効果

私はうまく機能するアプリケーションの統合テストをいくつか追加しました。

私のメインクラスは@SpringBootApplicationでアノテートされており、私の統合テストクラスは@RunWith(SpringRunner.class)@SpringBootTestで注釈されています。

私はより明確であることを@Configuration@ComponentScan@EnableAutoConfigurationに私のメインクラスの注釈を変更する場合は、私のテストクラスは、それが使用されているクラスのいずれかを検出し、より多くの情報を追加するために私を強制することはできませんと言って、コンパイル時エラーを与えます。

したがって、以下のように注釈を変更する必要があります。@RunWith(SpringRunner.class)@SpringBootTest(classes = EligibilityJobRunner.class)

私は、@SpringBootApplicationが上記の3つの注釈の便利な注釈であることを読んだのですが、なぜこの違いがありますか?どうもありがとう。

答えて

0

@SpringBootApplicationは、あなたがそれに置き換えてきたものより、注釈を適用するメタ注釈です:

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
@Inherited 
@SpringBootConfiguration 
@EnableAutoConfiguration 
@ComponentScan(excludeFilters = { 
     @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), 
     @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) 
public @interface SpringBootApplication { 

あなたが@SpringBootApplicationを使用したくない場合は、次の注釈のすべてをあなたのクラスに注釈を試します:

@SpringBootConfiguration 
@EnableAutoConfiguration 
@ComponentScan 

あなたのケースでは、@SpringBootConfigurationがありません。

次回にテストを実行するときに、SpringBootTestContextBootstrapper.javaのさまざまなポイントにデバッグブレークポイントを配置して、シーンの後ろに何が起こっているのかを確認します。

は、しかし、私はこれらの行は、問題がどこにあるかを示して思う:

Class<?> found = new SpringBootConfigurationFinder() 
      .findFromClass(mergedConfig.getTestClass()); 
    Assert.state(found != null, 
      "Unable to find a @SpringBootConfiguration, you need to use " 
        + "@ContextConfiguration or @SpringBootTest(classes=...) " 
        + "with your test"); 
+0

は、私が代わりにプレーン@ConfigurationのSpringBootConfiguration @追加した場合、実行時に動作しているようです。しかしIntellijは何らかの理由でコンパイル時エラーを表示しています。 – NewQueries

+0

Spring Bootとの統合性向上のために、IntelliJのバグトラッカーに公開チケットがあり、まだ公開中です:https://youtrack.jetbrains.com/issue/IDEA-139669。私はあなたもこの問題について言及することをお勧めします。 – Behrang

関連する問題