java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题
往期文章
「Java并發編程」談談Java中的內存模型JMM
面試官:說說你知道多少種線程池拒絕策略
為什么不要在MySQL中使用UTF-8編碼方式
前言
很多公司都有寫單元測試的硬性要求,在提交代碼的時候,如果單測通不過或者說單元測試各種覆蓋率不達標,會被拒絕合并代碼。寫單元測試,也是保證代碼質量的一種方式。
junit單元測試
相信絕大多數的Java開發者都用過Junit來寫單元測試。
引入依賴:
junit junit 4.12直接在方法上加上@Test注解即可:
加了@Test注解,就會有一個運行的圖標了。
spring的依賴問題
現在的Java開發,基本上離不開spring了。但是使用spring,寫單測的時候就會存在一個依賴注入的問題。
假設有如下一個Service:
@Servicepublic class TestService {? public String getString() { return "Hello World!"; }?}在Junit中直接自動裝配:
public class JunitTest {? @Autowired private TestService testService;? @Test public void test() { System.out.println(testService.getString()); }?}運行報錯:
springboot寫單元測試
在springboot中,解決spring依賴問題,非常的簡單。只需要它提供的幾個注解即可:
引入依賴:
org.springframework.boot spring-boot-starter-test test這里引入了一個spring-boot-starter-test依賴,是springboot中寫單測所需要的。
在單元測試類上添加@RunWith(SpringRunner.class)、@SpringBootTest注解:
這時候就可以正常的把spring依賴注入進來了,運行方法,可以看到springboot啟動時的輸出:
如果是通過spring initialize創建的springboot項目(本系列第一篇文章有講解),其實會自動創建一個單元測試類:
我們在寫單元測試的時候,直接繼承這個類即可。
單元測試事務回滾
寫單元測試,難免需要操作數據庫。有時候單元測試的數據庫跟開發時候的數據庫是同一個,為了不影響數據庫的數據,需要在單測完成之后,將操作回滾。這在springboot中也是很容易解決的事情,只需要將單測類繼承AbstractTransactionalJUnit4SpringContextTests即可
數據庫有數據如下:
單元測試類如下:
測試方法如下:
@Testpublic void deleteAll() { userRepo.deleteAll();}執行方法后,如果事務不會滾,則會清除user表中的所有數據。
通過結果查看,單測運行沒有問題,查看數據庫:
數據也沒有被刪除,證明事務已經回滾了。
把繼承的AbstractTransactionalJUnit4SpringContextTests類去掉,再次執行deleteAll方法:
數據庫中的數據已被刪除
總結
本文介紹了springboot中寫單元測試的方法。其實優雅的寫單元測試需要涉及到很多東西,比如mock(mockito、mockmvc等),本文都沒有涉及,有興趣的可以了解下。
總結
以上是生活随笔為你收集整理的java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 矩阵字符串配置任意合并表格布局
- 下一篇: trueOS能装linux软件,True