使用springboot對各層的程式碼進行測試!

趙鈺瑩發表於2018-06-14

  因為近段時間在一個系統,後端程式碼使用的技術棧是spring boot (版本1.5.12.RELEASE)、alibaba-spring-boot (版本1.5.12.0-SNAPSHOT)、pandora-boot (版本2018-05-release),寫好各種mapper、service、controller層的程式碼之後免不了要進行測試,最高效的測試方法還是寫單元測試,如果自己在本地把服務起來,頁面上點點點,那是極其low極力不推薦的!

  下面就介紹一下各個層的測試基類的寫法:

  pom依賴如下:

使用springboot對各層的程式碼進行測試! 

  一、mapper層的測試

  測試基類如下:

使用springboot對各層的程式碼進行測試!

  說明:1、使用@MybatisTest,如果不加註解@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE),那麼mybatis使用的是記憶體資料庫,並不是真實的tddl的資料庫,會報表不存在的錯,官方文件在此:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-test-autoconfigure/Using a real databaseThe In-memory embedded databases generally work well for tests since they are fast and don’t require any developer installation. However if you prefer to run tests against a real database, you can use the @AutoConfigureTestDatabase as follow:2、@Rollback(false) 單測完成預設會將資料回滾,如果不想回滾,想保留在資料庫中,要加(false)。

  二、service層的測試

  測試基類如下:

使用springboot對各層的程式碼進行測試!

  說明:在做service層的測試的時候,還是遇到一些問題,網上各種搜資料,很多例子在進行service層的測試時將dao層進行了mock的辦法,但我並不想mock,經過一頓勇猛猜測,最後終於跑通了。比起mapper層的測試,多了這麼幾個註解:@RunWith(PandoraBootRunner.class)@DelegateTo(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = TestConfiguration.class)參考資料: http://gitlab.alibaba-inc.com/middleware-container/pandora-boot/wikis/test

  為什麼要加最後一個註解呢,這個要看自己的專案來定,一開始寫的是@SpringBootTest(classes = Application.class),發現執行測試的時候總有一些service無法注入,報錯: No qualifying bean of type 'xxx' available。後來按照網上的解決辦法,自己寫了個TestConfiguration,程式碼如下:

使用springboot對各層的程式碼進行測試!

  具體的原因等空了還需要再推敲一下,遇到問題不能僅僅靠猜。

  三、controller層的測試:

  基類如下:

使用springboot對各層的程式碼進行測試!

  一般在程式controller層測試的時候,會將service層進行mock,我介紹2種寫法,分別是mock的方法和不mock的方法:1、不mock的方法:

使用springboot對各層的程式碼進行測試!

使用springboot對各層的程式碼進行測試!

  2、mock的方法:

使用springboot對各層的程式碼進行測試!

使用springboot對各層的程式碼進行測試!

  注意:一開始跑controller層測試的時候,response 總是404,後來發現一定要加上 @EnableWebMvc註解,問題解決。

  好了,測試跑通,現在感覺想怎麼測,就怎麼測。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2156156/,如需轉載,請註明出處,否則將追究法律責任。

相關文章