2015-06-30 100 views
1

使用Spring Boot時遇到了相當奇怪的事情。讓我們得到它。 我有一個應用程序,當從春季啓動時運行:運行,加載完美,我可以使用我的服務器。但是,如果我嘗試運行測試(通過從IntelliJ啓動測試或通過surefire插件)上下文無法加載。當正常運行spring-boot:應用程序加載但測試失敗

@EnableAsync 
@EnableCaching 
@EnableAutoConfiguration 
@EnableConfigurationProperties 
@Import({ 
    SecurityConfiguration.class, 
    DataConfiguration.class, 
    RestConfiguration.class 
}) 
public class SpringAtomApplication { 
    @Autowired 
    private DataLoaderManager dataLoaderManager = null; 

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

    @Bean 
    public CacheManager cacheManager() { 
    final GuavaCacheManager manager = new GuavaCacheManager(); 
    manager.setAllowNullValues(false); 
    return manager; 
    } 

    @PostConstruct 
    private void doPostConstruct() { 
    this.dataLoaderManager.doLoad(); 
    } 
} 

正如我所說的,應用程序加載沒有問題,:

問題在於這個類(僅適用所示部分)內:

@RestController 
@RequestMapping(
    value = "/sa/revisions/" 
) 
@SuppressWarnings("unchecked") 
class RevisionController { 
    @Autowired 
    // cant autowire this field 
    private RepositoryEntityLinks repositoryEntityLinks = null; 
    /* omitted */ 
} 

這裏是我的主類然而,當涉及到這個簡單的測試,一切都崩潰了:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = SpringAtomApplication.class) 
public class SpringAtomApplicationTests { 
    @Test 
    public void contextLoads() { 
    } 
} 

希望任何suggesti因爲我喜歡從測試開始。

+0

看起來像故障是我的。我通過我自己的配置類之一添加了Data rest配置導入,並通過了測試。儘管如此,我不知道爲什麼應用程序能夠在沒有它的情況下加載。任何人都可以提供任何提示? – kornicameister

+0

不,我不能在沒有看到代碼(和配置)和失敗的堆棧跟蹤的情況下提供任何提示。但是......我很高興你把它整理出來。 ;) –

回答

-1

你應該在你的測試類設置SpringApplicationContextLoader

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(
    classes = SpringAtomApplication.class, 
    loader = SpringApplicationContextLoader.class) 
public class SpringAtomApplicationTests { 
    @Test 
    public void contextLoads() { 
    } 
} 

這樣,您可以測試非網絡功能(如庫或服務)或啓動全配置嵌入式servlet容器和運行測試使用MockMvc。

參考:http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/SpringApplicationContextLoader.html

+0

據我所知,SpringApplicationConfiguration默認使用SpringApplicationContextLoader。但這個問題似乎在別處,因爲我在我的問題發表評論。 – kornicameister

+0

你可以發佈你的所有配置文件嗎? –

+0

這甚至不會編譯。 '@ SpringApplicationConfiguration'不公開'loader'屬性。相反,如前所述,'@ SpringApplicationConfiguration'通過'@ ContextConfiguration'聲明強制使用'SpringApplicationContextLoader'作爲元註釋_on @'@ SpringApplicationConfiguration'。 –

相關問題