spring Boot單元測(cè)試啟動(dòng)失敗排查:@SpringBootTest注解失效原因分析
在使用spring boot進(jìn)行單元測(cè)試時(shí),@SpringBootTest注解通常用于啟動(dòng)完整的Spring上下文環(huán)境,方便測(cè)試。然而,有時(shí)會(huì)遇到啟動(dòng)失敗的情況。本文分析“使用@SpringBootTest進(jìn)行Spring Boot單元測(cè)試時(shí)啟動(dòng)失敗”的問(wèn)題。
問(wèn)題:測(cè)試類(lèi)啟動(dòng)時(shí)拋出Java.lang.IllegalStateException: Failed to load application context異常,并伴隨一系列嵌套異常,最終指向org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [org.springframework.boot.autoconfigure.web.server.ServerProperties$servlet]。這表明Spring Boot在嘗試綁定server.servlet配置屬性時(shí)失敗,找不到合適的轉(zhuǎn)換器。
原因分析:配置文件(例如application.yml)中存在server.servlet配置,但該配置項(xiàng)可能為空或僅包含注釋?zhuān)?/p>
server: port: 80 servlet: #context-path: /demo
Spring Boot自動(dòng)配置機(jī)制嘗試解析此配置節(jié),由于沒(méi)有合適的轉(zhuǎn)換器將空字符串或注釋轉(zhuǎn)換為ServerProperties$Servlet對(duì)象,導(dǎo)致綁定失敗,最終使@SpringBootTest啟動(dòng)失敗。
解決方案:將server.servlet配置節(jié)注釋掉或刪除:
server: port: 80 #servlet: #context-path: /demo
刪除或注釋后,Spring Boot能夠成功加載上下文,測(cè)試類(lèi)即可正常運(yùn)行。 另外,需要注意的是,問(wèn)題描述中提到的項(xiàng)目包含數(shù)據(jù)庫(kù)密碼,這在公開(kāi)場(chǎng)合是不安全的,建議采用更安全的配置方式,例如使用環(huán)境變量或配置文件加密。