Springboot項(xiàng)目中單元測試時(shí)注入bean失敗的解決方案
Springboot項(xiàng)目中單元測試時(shí)注入bean失敗
問題背景
最近公司項(xiàng)目搭了一個(gè)springboot項(xiàng)目進(jìn)行開發(fā),在單元測試時(shí),由于生成項(xiàng)目后可能哪個(gè)同事把項(xiàng)目生產(chǎn)的test文件目錄刪了,也不知道是項(xiàng)目生成時(shí)test目錄沒有生成,需要自己建立一個(gè)test目錄進(jìn)行測試。
就是下圖中的紅框部分。。。

問題描述
在上圖中的test目錄建好之后寫測試類的時(shí)候死活bean注入不成功,注意這里解決的問題是不考慮springboot版本等問題的
如遇到springboot版本的問題導(dǎo)致bean類無法注入到項(xiàng)目中,可能是注解和springboot版本不匹配導(dǎo)致啟動(dòng)類啟動(dòng)時(shí)掃描不到相應(yīng)的bean類,這種錯(cuò)誤的解法,網(wǎng)上一收一大把,這里就不在給寫法了。。。
問題解決

也就是測試類的包名一定要和啟動(dòng)類的包名一致,包名必須一致!必須一致!一致!重要的話說三遍!??!
如果包名不一致,當(dāng)啟動(dòng)類啟動(dòng)時(shí)就不知道去哪掃描bean,所以也就無法注入。
所以這里也給大家一個(gè)解決bean注入失敗的思路:
1.首先檢測測試類包名和啟動(dòng)類包名是否一致!
2.檢查自己使用的注解是不是和當(dāng)前springboot的版本一致。
3.檢測開發(fā)代碼中的bean類是否注入是正常的,然后再根據(jù)情況逐步排查。
Springboot單元測試,注入失敗,報(bào)空指針錯(cuò)誤
我們?cè)谑褂庙?xiàng)目的時(shí)候,常常需求去單元測試,去測試我們寫的接口是否可以正常運(yùn)行。自己在練習(xí)Spring Boot 搭建 Redis的時(shí)候進(jìn)行測試。
下面是測試類
/**
?* @author jins
?* @date on 2018/5/6.
?*/
@RunWith(SpringJUnit4ClassRunner.class)
public class RedisTest {
?
? ? @Autowired
? ? private StringRedisTemplate stringRedisTemplate;
?
? ? @Test
? ? public void redisTest(){
? ? ? ? stringRedisTemplate.opsForValue().set("ceshi","redis");
? ? ? ? System.out.println(stringRedisTemplate.opsForValue().get("ceshi"));
?
? ? }
}運(yùn)行的時(shí)候發(fā)現(xiàn),直接會(huì)報(bào)NullPointException,或者是No bean.比較疑惑,自己想這應(yīng)該是spring 容器里面沒有注入Bean導(dǎo)致的,我們沒有從spring 容器中拿到 StringRedisTemplate Bean 所以會(huì)報(bào)錯(cuò)。
然后自己去網(wǎng)上看了一下,缺少了注解 @SpringBootTest ,自己看了下文檔.這里點(diǎn)進(jìn)去注解顯示以下內(nèi)容.看了內(nèi)容知道,通過@SpringBootTest注解,給我們提供了Spring容器管理.加上之后,可以運(yùn)行.
Annotation that can be specified on a test class that runs Spring Boot based tests.
Provides the following features over and above the regular Spring TestContext
Framework:
注解制定了一個(gè)測試類運(yùn)行了Spring Boot環(huán)境。提供了以下一些特性:
Uses SpringBootContextLoader as the default ContextLoader when no specific ContextConfiguration#loader() @ContextConfiguration(loader=...) is defined.
當(dāng)沒有特定的ContextConfiguration#loader()(@ContextConfiguration(loader=...))被定義那么就是SpringBootContextLoader作為默認(rèn)的ContextLoader。
Automatically searches for a SpringBootConfiguration @SpringBootConfiguration when nested @Configuration is not used, and no explicit #classes() classes are
specified.
自動(dòng)搜索到SpringBootConfiguration注解的文件。
Allows custom Environment properties to be defined using the properties() properties attribute}.
允許自動(dòng)注入Environment類讀取配置文件。
Provides support for different #webEnvironment() webEnvironment modes,
including the ability to start a fully running container listening on a
WebEnvironment#DEFINED_PORT defined or WebEnvironment#RANDOM_PORT
random port.
提供一個(gè)webEnvironment環(huán)境,可以完整的允許一個(gè)web環(huán)境使用隨機(jī)的端口或者自定義的端口。
Registers a org.springframework.boot.test.web.client.TestRestTemplate
TestRestTemplate bean for use in web tests that are using a fully running container.
注冊(cè)了TestRestTemplate類可以去做接口調(diào)用。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA使用jformdesigner插件做管理系統(tǒng)MVC架構(gòu)的步驟和實(shí)現(xiàn)思路
在?IntelliJ?IDEA?中結(jié)合?JFormDesigner?插件,通過?Swing?框架實(shí)現(xiàn)一個(gè)管理系統(tǒng)的?MVC?架構(gòu)是一種經(jīng)典的開發(fā)方式,以下是具體的步驟和實(shí)現(xiàn)思路,包含從項(xiàng)目創(chuàng)建到?MVC?架構(gòu)的核心代碼實(shí)現(xiàn),需要的朋友可以參考下2024-12-12
Spring中的@ConfigurationProperties在方法上的使用詳解
這篇文章主要介紹了Spring中的@ConfigurationProperties在方法上的使用詳解,@ConfigurationProperties應(yīng)該經(jīng)常被使用到,作用在類上的時(shí)候,將該類的屬性取值?與配置文件綁定,并生成配置bean對(duì)象,放入spring容器中,提供給其他地方使用,需要的朋友可以參考下2024-01-01
Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁數(shù)據(jù)的實(shí)例
本文主要介紹了Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
java實(shí)現(xiàn)多文件上傳至本地服務(wù)器功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多文件上傳至本地服務(wù)器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Java8新特性之泛型的目標(biāo)類型推斷_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。下面通過本文給分享Java8新特性之泛型的目標(biāo)類型推斷,感興趣的朋友參考下吧2017-06-06
mybatis?xml文件熱加載實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了mybatis?xml文件熱加載實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

