2017-05-01 57 views
1

我有一個spring boot非web應用程序。@SpringBootApplication註解在JUnit測試中的效果

我已經爲我的應用程序添加了一些集成測試,可以很好地工作。

我的主課有@SpringBootApplication註解,我的集成測試課用@RunWith(SpringRunner.class)@SpringBootTest註解。

如果我改變我的主類註釋@Configuration@ComponentScan@EnableAutoConfiguration更加明確,我的測試類給一個編譯時錯誤說,它不能檢測正在使用的課程之一,並迫使我添加更多的信息。

所以我必須改變註釋如下@RunWith(SpringRunner.class)@SpringBootTest(classes = EligibilityJobRunner.class)

我讀過@SpringBootApplication是上述三個註釋的方便註釋,那麼爲什麼這個區別呢?非常感謝。

回答

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

似乎在運行時的工作如果我添加@ SpringBootConfiguration而不是純@Configuration。但是由於某種原因,Intellij仍然顯示編譯時錯誤。 – NewQueries

+0

IntelliJ的錯誤跟蹤器上有一個開放票證,可以更好地與Spring Boot集成,並且它仍在porgress中:https://youtrack.jetbrains.com/issue/IDEA-139669。我建議你也提到這個問題。 – Behrang