2017-01-08 74 views
1

我按照這裏的指南,https://spring.io/guides/gs/spring-boot/ - 克隆了使用Gradle構建的項目,並嘗試運行...應用程序運行良好。然後,我改變了一些文件結構按我的要求,並試圖給那裏的單元測試的情況下運行,但得到這個錯誤 -無法從JUnit測試文件中找到@SpringBootApplication

無法找到@SpringBootConfiguration,你需要使用@ContextConfiguration或@SpringBootTest(類= ...)與你的測試

我只重組碼在那裏,這是我目前的項目結構 -

/projectroot 
    - /src/main/java 
      -Application.java 
      -/controller 
       -MyController.java 
      -/util 
       -MyUtil.java 
      -/model 
       -MyModel.java 

現在試圖從

運行測試用例

/src/test/java/controller/MyControllerTest.java

我曾經使用過此Stack Overflow link消失了,明白,如果我把我的測試文件夾下的/ src目錄/主/ JAVA /它可能工作。但是如果我這樣做,測試文件不會編譯,並且它似乎也不是將應用程序代碼與測試代碼一起使用的正確方法。我知道我錯過了一些非常重要的東西。

回答

1

您設置測試的方式(使用整個彈簧啓動上下文),我認爲MyControllerTest.java需要至多與Application.java相同。另外,我注意到Application.java使用默認包,你應該把它移動到一個包,讓您所有的豆類都是低於您的春季啓動主類:

/projectroot 
    - /src/main/java/com/example/project/ 
      -Application.java 
      -/controller 
       -MyController.java 
      -/util 
       -MyUtil.java 
      -/model 
       -MyModel.java 
    - /src/test/java/com/example/project/ 
      -MyControllerTest.java 

Spring's documentation

如何春Boot的上下文從測試中解析

搜索算法從包進行測試 ,直到找到@SpringBootApplication或@SpringBootConfiguration 帶註釋的類。只要你用合理的方式構建你的代碼,你的主要配置通常就可以找到。

關於使用默認的包同春引導

當一個類不包括它被認爲 在「默認包」一個包聲明。 「默認軟件包」的使用通常是不鼓勵的,應該避免使用 。對於使用@ComponentScan, @EntityScan或@SpringBootApplication註釋的Spring Boot應用程序,它可能會導致特定的 問題,因爲每個jar的每個類 都將被讀取。

我們建議您遵循Java推薦的包命名約定並使用反向域名(例如,com.example.project)。

+0

謝謝,這解決了我的問題。你是一個拯救生命的人:)。 – boolean