您好,登錄后才能下訂單哦!
本篇內容介紹了“SpringRunner和SpringJUnit4ClassRunner的區別是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
@RunWith(SpringRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
SpringRunner 繼承了SpringJUnit4ClassRunner,沒有擴展任何功能;使用前者,名字簡短而已。
如果在Maven依賴中可以看到該庫已經載入,必須去掉<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>
compile(編譯范圍)
默認就是compile,什么都不配置也就是意味著compile。
compile表示被依賴項目需要參與當前項目的編譯,當然后續的測試,運行周期也參與其中,是一個比較強的依賴。
打包的時候通常需要包含進去。
test(測試范圍)
scope為test表示依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯,執行。
比較典型的如junit。
runntime(運行時范圍)
runntime表示被依賴項目無需參與項目的編譯,不過后期的測試和運行周期需要其參與。與compile相比,跳過編譯而已,說實話在終端的項目(非開源,企業內部系統)中,和compile區別不是很大。
比較常見的如JSR×××的實現,對應的API jar是compile的,具體實現是runtime的,compile只需要知道接口就足夠了。
Oracle jdbc驅動架包就是一個很好的例子,一般scope為runntime。
另外runntime的依賴通常和optional搭配使用,optional為true。我可以用A實現,也可以用B實現。
provided(已提供范圍)
provided意味著打包的時候可以不用包進去,別的設施(Web Container)會提供。
事實上該依賴理論上可以參與編譯,測試,運行等周期。
相當于compile,但是在打包階段做了exclude的動作。
例如, 如果你開發了一個web 應用,你可能在編譯 classpath 中需要可用的Servlet API 來編譯一個servlet,但是你不會想要在打包好的WAR 中包含這個Servlet API;這個Servlet API JAR 由你的應用服務器或者servlet 容器提供。
已提供范圍的依賴在編譯classpath (不是運行時)可用。
它們不是傳遞性的,也不會被打包。
system(系統范圍)
system范圍依賴與provided 類似,但是你必須顯式的提供一個對于本地系統中JAR 文件的路徑。
這么做是為了允許基于本地對象編譯,而這些對象是系統類庫的一部分。這樣的構件應該是一直可用的,Maven 也不會在倉庫中去尋找它。
如果你將一個依賴范圍設置成系統范圍,你必須同時提供一個 systemPath 元素。
注意該范圍是不推薦使用的(你應該一直盡量去從公共或定制的 Maven 倉庫中引用依賴)。
scope的依賴傳遞
A–>B–>C。當前項目為A,A依賴于B,B依賴于C。知道B在A項目中的scope,那么怎么知道C在A中的scope呢?
答案是:
當C是test或者provided時,C直接被丟棄,A不依賴C;
否則A依賴C,C的scope繼承于B的scope。
“SpringRunner和SpringJUnit4ClassRunner的區別是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。