Junit下使用Mock進行單元測試的注意點(待補充)
編寫測試方法前
不要使用@Autowired注入待測試類,使用@InjectMocks。
- @Autowired會啟動Spring,導致單元測試運行速度變慢。
- 如果待測試類中有讀配置文件的全局變量,@Autowired會自動讀配置,可能在環境上造成問題。
@MockBean所有依賴
- 即@MockBean在被測試類中用@Autowired注入的變量。
編寫測試方法時
注意所有能調用的方法都是已MockBean的方法
- 注意Mock與MockBean的區別,Mock不會調用內部的方法,等同於Mockito.mock()。MockBean與InjeckMocks作用類似,注入對應類。
- 在配置類中定義的變量要Mock使用,盡量不用@value直接從配置文件讀。
@value變量用反射Mock
- 單元測試中對待測試類里用@value的變量采取反射方法Mock
數據一致性造成的問題
- 單元測試中能用Mockito.any()的時候盡量用any(),避免數據一致性造成的問題。
點擊查看代碼
ReflectionTestUtils.setField(this, "name","content");
對void方法進行單元測試
- 在本類中其他地方有調用該void方法時,從調用處下手測試。
- 在本類中無調用,考慮新建實例后使用Mockito.verify()測試,或直接在測試中調用該方法。
編碼后
修改待測試類業務代碼后同步修改單元測試