springboot遇見問題總結
今天開始學習創建springboot項目
問題1:
產生異常:
創建項目目錄:
demo代碼:
代碼Controller
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by andyliu on 2018/10/3. */ @RestController public class LoginController { @RequestMapping(value= "/login") public String login(){ return "success1"; } }
測試用例采用mockMvc實現單元測試用例 mockmvc是mvc單元測試用例對象 preform(英文執行的意思)方法執行方法內部需要一個MockMvcRequestBuilders對象
MockRequestBuilders對象用來構建mockmvc的通過get方法模擬瀏覽器發送的get請求get方法參數為url請求地址,同時accept方法參數為指定接收的媒體類型為什麽
andExpect方法為期望方法 也就是說該方法是我們期望的預期值 內部傳入status()方法是對返回的狀態判斷通過isOk判斷狀態是否正確 同時可以添加多個期望比如期望內容 通過content()方法返回內容調用string()方法內容通過equalTo()方法來比較返回值內容是否相等。
@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class LoginTest { @Autowired private MockMvc mockMvc; @Test public void loginTest() throws Exception { mockMvc.perform(MockMvcRequestBuilders.get("/login").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo("success"))); } }
當執行測試用例的時候這樣會報出上面的錯誤。
為什麽采用mackmvc來進行單元測試那,這樣可以不通過創建httpClient來創建客戶端請求 同時避免了由於網絡等各種原因導致的測試問題
那麽上面的異常產生原因是什麽那:
在闡述上面的問題原因之前 在我說一下這個問題在使用測試用例之前就出現了 那就是創建好springboot項目後采用瀏覽器訪問localhost:8080/login 無法訪問創建好的方法。以前創建過一直認為這樣寫沒有錯誤,沒錯代碼是沒有任何問題的。問題產生原因是????
答案:
springboot創建同時會創建一個啟動類 因為springboot內部集成了tomcat等應用服務器 測試中也同樣創建了這樣一個啟動類
@SpringBootApplication public class SBootDemoApplication { public static void main(String[] args) { SpringApplication.run(SBootDemoApplication.class, args); } }
springboot啟動類要放在根目錄下,網上都說根目錄,按我說就是你所有代碼的上一級目錄,可以讓啟動類在啟動的時候掃描到所有的類
正確的操作如圖就解決了這個問題
springboot遇見問題總結