1. 程式人生 > >【JAVA】使用Mockito進行單元測試

【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