溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring測試內(nèi)容有哪些

發(fā)布時(shí)間:2021-12-22 11:54:52 來源:億速云 閱讀:147 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Spring測試內(nèi)容有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spring測試內(nèi)容有哪些”吧!

1 Spring測試介紹

測試是企業(yè)軟件開發(fā)的組成部分。本章重點(diǎn)介紹IoC原則為單元測試帶來的附加價(jià)值,以及Spring框架對集成測試的支持所帶來的好處。(對企業(yè)中測試的徹底處理不在本參考手冊的范圍之內(nèi)。)

2 單元測試

與傳統(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é)描述。

2.1 Mock對象

Spring包含許多專用于mock的包:

  • Environment

  • JNDI

  • Servlet API

  • Spring Web Reactive

2.1.1 Environment

org.springframework.mock.env包包含EnvironmentPropertySource抽象mock實(shí)現(xiàn)。MockEnvironmentMockPropertySource對于為依賴于特定環(huán)境屬性的代碼開發(fā)<u>容器外測試</u>非常有用。

2.1.2 JNDI

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。

2.1.3 Servlet API

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提供了集成測試框架。

2.1.4 Spring Web Reactive

org.springframework.mock.http.server.reactive包包含ServerHttpRequestServerHttpResponse的mock實(shí)現(xiàn),供WebFlux應(yīng)用程序使用。org.springframework.mock.web.server包包含一個(gè)模擬ServerWebExchange,它依賴于那些模擬請求和響應(yīng)對象。

MockServerHttpRequestMockServerHttpResponse都從與特定于服務(wù)器的實(shí)現(xiàn)相同的抽象基類擴(kuò)展,并與它們共享行為。例如,模擬請求一旦創(chuàng)建便是不可變的,但是你可以使用ServerHttpRequest中的mutate()方法來創(chuàng)建修改后的實(shí)例。

為了使模擬響應(yīng)正確實(shí)現(xiàn)寫契約并返回寫完成句柄(即Mono <Void>),默認(rèn)情況下,它使用帶有Fluxcache().then()來對數(shù)據(jù)進(jìn)行緩沖并使其可用于測試中的斷言。應(yīng)用程序可以設(shè)置自定義編寫函數(shù)(例如,測試一個(gè)無限流)。

WebTestClient建立在模擬請求和響應(yīng)的基礎(chǔ)上,為不使用HTTP服務(wù)器的WebFlux應(yīng)用程序測試提供支持。客戶端還可以用于正在運(yùn)行的服務(wù)器的端到端測試。

2.2 單元測試支持類

Spring包含許多可以幫助進(jìn)行單元測試的類。它們分為兩類:

  • 通用測試工具

  • Spring MVC測試工具

2.2.1 通用測試工具

org.springframework.test.util包包含幾個(gè)通用的實(shí)用程序用于單元測試和集成測試。

ReflectionTestUtils是基于反射的實(shí)用程序方法的集合。在需要更改常量值、設(shè)置非公共字段、調(diào)用非公共setter方法或調(diào)用非公共配置或生命周期回調(diào)方法的測試場景中,你可以使用這些方法

  • ORM框架(如JPA和Hibernate)允許privateprotected的字段訪問,而不是域?qū)嶓w中的屬性的public setter方法。

  • Spring支持注解(例如@Autowired、@Inject@Resource),這些注解為privateprotected的字段,setter方法和配置方法提供依賴項(xiàng)注入。

  • 使用例如@PostConstruct@PreDestroy之類的注解用于生命周期回調(diào)方法。

AopTestUtils是與AOP相關(guān)的實(shí)用程序方法的集合。你可以使用這些方法來獲取對隱藏在一個(gè)或多個(gè)Spring代理后面的基礎(chǔ)目標(biāo)對象的引用。例如,如果你已經(jīng)通過使用庫(如EasyMockMockito)將bean配置為動(dòng)態(tài)mock,并且該mock包裝在Spring代理中,那么你可能需要直接訪問底層的mock,以在其上配置期望并執(zhí)行驗(yàn)證。有關(guān)Spring的核心AOP實(shí)用程序,請參閱AopUtils和AopProxyUtils。

2.2.2 Spring MVC 測試工具

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模擬中的MockHttpServletRequestMockHttpSession等結(jié)合使用。為了與Spring MVC的WebApplicationContext配置一起對Spring MVC和REST Controller類進(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)注!

向AI問一下細(xì)節(jié)

免責(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)容。

AI