您好,登錄后才能下訂單哦!
這篇文章主要講解了“Spring測試內(nèi)容有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spring測試內(nèi)容有哪些”吧!
測試是企業(yè)軟件開發(fā)的組成部分。本章重點(diǎn)介紹IoC原則為單元測試帶來的附加價(jià)值,以及Spring框架對集成測試的支持所帶來的好處。(對企業(yè)中測試的徹底處理不在本參考手冊的范圍之內(nèi)。)
與傳統(tǒng)的Java EE開發(fā)相比,依賴注入應(yīng)該使你的代碼對容器的依賴程度降低。組成應(yīng)用程序的POJO應(yīng)該可以在JUnit或TestNG測試中進(jìn)行測試,并且可以使用new運(yùn)算符實(shí)例化對象,而無需使用Spring或任何其他容器。你可以使用mock對象(結(jié)合其他有價(jià)值的測試技術(shù))單獨(dú)測試代碼。如果你遵循Spring的體系結(jié)構(gòu)建議,那么代碼庫的最終分層和組件化將使單元測試更加容易。例如,你可以通過存根或模擬DAO或存儲(chǔ)庫接口來測試服務(wù)層對象,而無需在運(yùn)行單元測試時(shí)訪問持久性數(shù)據(jù)。
真正的單元測試通常運(yùn)行非??欤?yàn)闆]有可設(shè)置的運(yùn)行時(shí)基礎(chǔ)架構(gòu)。將真正的單元測試作為開發(fā)方法的一部分可以提高生產(chǎn)率。你可能不需要測試章節(jié)的這一部分來幫助你為基于ioc的應(yīng)用程序編寫有效的單元測試。然而,對一些單元測試場景,Spring框架提供了mock對象和測試支持類,它們在這個(gè)章節(jié)描述。
Spring包含許多專用于mock的包:
Environment
JNDI
Servlet API
Spring Web Reactive
org.springframework.mock.env
包包含Environment
和PropertySource
抽象mock實(shí)現(xiàn)。MockEnvironment
和MockPropertySource
對于為依賴于特定環(huán)境屬性的代碼開發(fā)<u>容器外測試</u>非常有用。
org.springframework.mock.jndi
包包含JNDI SPI的部分實(shí)現(xiàn),可用于為測試套件或獨(dú)立應(yīng)用程序設(shè)置簡單的JNDI環(huán)境。例如,如果JDBC DataSource
實(shí)例在測試代碼中與在Java EE容器中綁定到相同的JNDI名稱,則可以在測試場景中重用應(yīng)用程序代碼和配置,而無需進(jìn)行修改。
從Spring框架5.2開始,正式棄用了
org.springframework.mock.jndi
包中的mock JNDI支持,而希望使用第三方的完整解決方案,例如Simple-JNDI
。
org.springframework.mock.web
包包含一組全面的Servlet API模擬對象,這些對象對于測試Web上下文,控制器和過濾器非常有用。這些模擬對象是針對Spring的Web MVC框架使用的,通常比動(dòng)態(tài)模擬對象(例如EasyMock
)或其他Servlet API模擬對象(例如MockObjects
)更方便使用。
從Spring框架5.0開始,
org.springframework.mock.web
中的模擬對象基于Servlet 4.0 API。
Spring MVC測試框架建立在模擬Servlet API對象的基礎(chǔ)上,為Spring MVC提供了集成測試框架。
org.springframework.mock.http.server.reactive
包包含ServerHttpRequest
和ServerHttpResponse
的mock實(shí)現(xiàn),供WebFlux
應(yīng)用程序使用。org.springframework.mock.web.server
包包含一個(gè)模擬ServerWebExchange
,它依賴于那些模擬請求和響應(yīng)對象。
MockServerHttpRequest
和MockServerHttpResponse
都從與特定于服務(wù)器的實(shí)現(xiàn)相同的抽象基類擴(kuò)展,并與它們共享行為。例如,模擬請求一旦創(chuàng)建便是不可變的,但是你可以使用ServerHttpRequest
中的mutate()
方法來創(chuàng)建修改后的實(shí)例。
為了使模擬響應(yīng)正確實(shí)現(xiàn)寫契約并返回寫完成句柄(即Mono <Void>),默認(rèn)情況下,它使用帶有Flux
的cache().then()
來對數(shù)據(jù)進(jìn)行緩沖并使其可用于測試中的斷言。應(yīng)用程序可以設(shè)置自定義編寫函數(shù)(例如,測試一個(gè)無限流)。
WebTestClient
建立在模擬請求和響應(yīng)的基礎(chǔ)上,為不使用HTTP服務(wù)器的WebFlux
應(yīng)用程序測試提供支持。客戶端還可以用于正在運(yùn)行的服務(wù)器的端到端測試。
Spring包含許多可以幫助進(jìn)行單元測試的類。它們分為兩類:
通用測試工具
Spring MVC測試工具
org.springframework.test.util
包包含幾個(gè)通用的實(shí)用程序用于單元測試和集成測試。
ReflectionTestUtils
是基于反射的實(shí)用程序方法的集合。在需要更改常量值、設(shè)置非公共字段、調(diào)用非公共setter方法或調(diào)用非公共配置或生命周期回調(diào)方法的測試場景中,你可以使用這些方法
ORM框架(如JPA和Hibernate)允許private
或protected
的字段訪問,而不是域?qū)嶓w中的屬性的public
setter
方法。
Spring支持注解(例如@Autowired
、@Inject
和@Resource
),這些注解為private
或protected
的字段,setter
方法和配置方法提供依賴項(xiàng)注入。
使用例如@PostConstruct
和@PreDestroy
之類的注解用于生命周期回調(diào)方法。
AopTestUtils是與AOP相關(guān)的實(shí)用程序方法的集合。你可以使用這些方法來獲取對隱藏在一個(gè)或多個(gè)Spring代理后面的基礎(chǔ)目標(biāo)對象的引用。例如,如果你已經(jīng)通過使用庫(如EasyMock
或Mockito
)將bean配置為動(dòng)態(tài)mock
,并且該mock
包裝在Spring代理中,那么你可能需要直接訪問底層的mock
,以在其上配置期望并執(zhí)行驗(yàn)證。有關(guān)Spring的核心AOP實(shí)用程序,請參閱AopUtils和AopProxyUtils。
org.springframework.test.web
包包含ModelAndViewAssert
,你可以將其與JUnit、TestNG或任何其他測試框架結(jié)合使用,以進(jìn)行處理Spring MVC ModelAndView
對象的單元測試。
單元測試Spring MVC控制器
要對作為POJO的Spring MVC
Controller
類進(jìn)行單元測試,請將ModelAndViewAssert
與Spring的Servlet API模擬中的MockHttpServletRequest
、MockHttpSession
等結(jié)合使用。為了與Spring MVC的WebApplicationContext
配置一起對Spring MVC和RESTController
類進(jìn)行全面的集成測試,請改用Spring MVC測試框架。
感謝各位的閱讀,以上就是“Spring測試內(nèi)容有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Spring測試內(nèi)容有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。