SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說明
SpringRunner和SpringJUnit4ClassRunner有什么區(qū)別?
@RunWith(SpringRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
這兩個(gè)有什么區(qū)別?
SpringRunner 繼承了SpringJUnit4ClassRunner,沒有擴(kuò)展任何功能;使用前者,名字簡短而已。
SpringRunner無法映射到SpringJUnit4ClassRunner
如果在Maven依賴中可以看到該庫已經(jīng)載入,必須去掉<scope>test</scope>
<dependency> ?? ?<groupId>org.springframework.boot</groupId> ?? ?<artifactId>spring-boot-starter-test</artifactId> ?? ?<scope>test</scope> </dependency>
<dependency> ?? ?<groupId>org.springframework.boot</groupId> ?? ?<artifactId>spring-boot-starter-test</artifactId> </dependency>
PS:scope的分類
compile(編譯范圍)
- 默認(rèn)就是compile,什么都不配置也就是意味著compile。
- compile表示被依賴項(xiàng)目需要參與當(dāng)前項(xiàng)目的編譯,當(dāng)然后續(xù)的測試,運(yùn)行周期也參與其中,是一個(gè)比較強(qiáng)的依賴。
- 打包的時(shí)候通常需要包含進(jìn)去。
test(測試范圍)
- scope為test表示依賴項(xiàng)目僅僅參與測試相關(guān)的工作,包括測試代碼的編譯,執(zhí)行。
- 比較典型的如junit。
runntime(運(yùn)行時(shí)范圍)
- runntime表示被依賴項(xiàng)目無需參與項(xiàng)目的編譯,不過后期的測試和運(yùn)行周期需要其參與。與compile相比,跳過編譯而已,說實(shí)話在終端的項(xiàng)目(非開源,企業(yè)內(nèi)部系統(tǒng))中,和compile區(qū)別不是很大。
- 比較常見的如JSR×××的實(shí)現(xiàn),對應(yīng)的API jar是compile的,具體實(shí)現(xiàn)是runtime的,compile只需要知道接口就足夠了。
- Oracle jdbc驅(qū)動(dòng)架包就是一個(gè)很好的例子,一般scope為runntime。
- 另外runntime的依賴通常和optional搭配使用,optional為true。我可以用A實(shí)現(xiàn),也可以用B實(shí)現(xiàn)。
provided(已提供范圍)
- provided意味著打包的時(shí)候可以不用包進(jìn)去,別的設(shè)施(Web Container)會提供。
- 事實(shí)上該依賴?yán)碚撋峡梢詤⑴c編譯,測試,運(yùn)行等周期。
- 相當(dāng)于compile,但是在打包階段做了exclude的動(dòng)作。
- 例如, 如果你開發(fā)了一個(gè)web 應(yīng)用,你可能在編譯 classpath 中需要可用的Servlet API 來編譯一個(gè)servlet,但是你不會想要在打包好的WAR 中包含這個(gè)Servlet API;這個(gè)Servlet API JAR 由你的應(yīng)用服務(wù)器或者servlet 容器提供。
- 已提供范圍的依賴在編譯classpath (不是運(yùn)行時(shí))可用。
- 它們不是傳遞性的,也不會被打包。
system(系統(tǒng)范圍)
- system范圍依賴與provided 類似,但是你必須顯式的提供一個(gè)對于本地系統(tǒng)中JAR 文件的路徑。
- 這么做是為了允許基于本地對象編譯,而這些對象是系統(tǒng)類庫的一部分。這樣的構(gòu)件應(yīng)該是一直可用的,Maven 也不會在倉庫中去尋找它。
- 如果你將一個(gè)依賴范圍設(shè)置成系統(tǒng)范圍,你必須同時(shí)提供一個(gè) systemPath 元素。
- 注意該范圍是不推薦使用的(你應(yīng)該一直盡量去從公共或定制的 Maven 倉庫中引用依賴)。
scope的依賴傳遞
A–>B–>C。當(dāng)前項(xiàng)目為A,A依賴于B,B依賴于C。知道B在A項(xiàng)目中的scope,那么怎么知道C在A中的scope呢?
答案是:
- 當(dāng)C是test或者provided時(shí),C直接被丟棄,A不依賴C;
- 否則A依賴C,C的scope繼承于B的scope。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺析SpringMVC中的適配器HandlerAdapter
這篇文章主要介紹了SpringMVC中的適配器HandlerAdapter的相關(guān)資料,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
教你使用eclipse?搭建Swt?環(huán)境的全過程
本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Java中轉(zhuǎn)義字符反斜杠\的代替方法及repalceAll內(nèi)涵解析
這篇文章主要介紹了Java中轉(zhuǎn)義字符反斜杠\的代替方法及repalceAll內(nèi)涵解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
小米Java程序員第二輪面試10個(gè)問題 你是否會被刷掉?
小米Java程序員第二輪面試10個(gè)問題,你是否會被刷掉?掌握好基礎(chǔ)知識,祝大家面試順利2017-11-11

