項(xiàng)目場(chǎng)景:
最近在測(cè)試寫好mapper相關(guān)接口時(shí)是,出現(xiàn)空指針異常,所以記錄一下。
問(wèn)題描述
在測(cè)試用戶登錄時(shí),出現(xiàn)如下錯(cuò)誤
測(cè)試方法
錯(cuò)誤信息
原因分析:
通過(guò)分析日志了解到原因是無(wú)法調(diào)用“AdminUserMapper.login(String, String)”,因?yàn)椤皌his.adminUserMapper”為空
應(yīng)該是AdminUserMapper沒有注入進(jìn)來(lái),但是自己已經(jīng)引入進(jìn)來(lái)了
@Autowired
private AdminUserMapper adminUserMapper;
是沒有問(wèn)題的,而且配置了@MapperScan,就是不能引入。查了網(wǎng)上資料后終于知道錯(cuò)誤在哪。
在test測(cè)試目錄下,我們寫的測(cè)試類要加上@SpringBootTest
解決方案:
如下圖所示
最后這里總結(jié)一下java.lang.NullPointerException出現(xiàn)的幾種原因文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-432520.html
總結(jié)java.lang.NullPointerException出現(xiàn)的幾種原因
1、字符串變量未初始化
2、接口類型的對(duì)象沒有用具體的類初始化,比如: Map map // 會(huì)報(bào)錯(cuò) Map map = new Map(); //則不會(huì)報(bào)錯(cuò)了
3、當(dāng)一個(gè)對(duì)象的值為空時(shí),你沒有判斷為空的情況。
4、字符串與文字的比較,文字可以是一個(gè)字符串或Enum的元素,如下會(huì)出現(xiàn)異常 String str = null; if(str.equals(“Test”)){ //這里的代碼將不會(huì)被觸發(fā),因?yàn)闀?huì)拋出java.lang.NullPointerException異常。 }
5、優(yōu)先使用String.valueOf()方法代替toString() 當(dāng)程序代碼需要對(duì)象的字符串表示形式時(shí),請(qǐng)避免使用該對(duì)象的toString方法。如果你的對(duì)象的引用等于null,NullPointerException則會(huì)拋出,使用靜態(tài)String.valueOf方法,該方法不會(huì)拋出任何異常并打印"null"
6、class被聲明了類型, 默認(rèn) class = null; 這樣在調(diào)用class中方法的時(shí)候系統(tǒng)只能給你個(gè)空指針異常, 給其實(shí)例化就好了:class = new Class();
7、返回null,方法的返回值不要定義成為一般的類型,而是用數(shù)組。這樣如果想要返回null的時(shí)候就能避免許多不必要的NullPointerException。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-432520.html
到了這里,關(guān)于springboot項(xiàng)目test單元測(cè)試java.lang.NullPointerException問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!