【JAVA】使用Mockito進行單元測試
1. @Mock與@InjectMocks的作用
@Mock:建立一個Mock
@InjectMocks:建立一個例項(被測試類的例項,一般只用一次該註解)
在單元測試某個類的時候,需要標註@InjectMocks,該類的變數需要添加註解@Mock,當需要用到被測試類中變數下的變數時,需要通過Mockito.when(method).thenReturn()進行初始化
ps:必須使用@RunWith(MockitoJUnitRunner.class)或MockitoAnnotations.initMocks(this)進行mocks的初始化
2. 三種方式用於Mockito的單元測試
2.1 設定方法預期返回
Mockito.when(list.get(0)).thenReturn(“111”)
2.2 驗證方法呼叫(不會用- -)
Mockito.verify(list, times(2)).get(0)
2.3 驗證返回值
Assert.assertNotNull(task)
ps:當需模擬多個if-else情況時,只需在測試方法中多次呼叫目標方法即可,如果想為了清晰也能對同一個方法進行多個測試方法。
! ! ! 當使用Mockito匹配可變引數時,多傳一次同類型的即可
! ! ! 當模擬靜態方法或者工廠方法時,使用PowerMock,
在類上加如下註解:
@RunWith(PowerMockRunner.class)
@PrepareForTest(value = {UyunServiceHolder.class})
程式碼如下:
UyunServiceHolder uyunServiceHolder = PowerMockito.mock(UyunServiceHolder.class);
PowerMockito.mockStatic(UyunServiceHolder.class);
PowerMockito.when(UyunServiceHolder.getInstance()).thenReturn(uyunServiceHolder);
! ! ! dao層的方法不需要mock