验证调用
测试类自己的
方法,使用
spy方法
@
Test public void should_resetInfo_when_auto() throws Exception { Presenter presenter=spy(Presenter.
class); presenter.
auto(
"000222"); verify(presenter).resetInfo(
"000222"); }
验证是否正确调用
其他类方法 , 使用
verify
@Test public void should_setInfo_when_resetInfo() throws Exception { Presenter presenter=
new Presenter() ; View view = mock(View.class); presenter.resetInfo(
"000222"); verify(view).setInfo(
"000222"); }
验证不会调用
其他类方法,使用
never
@Test public void should_setInfo_when_resetInfo() throws Exception { Presenter presenter=
new Presenter() ; View view = mock(View.class); presenter.judgeStep(
2); verify(view, never()).showEmpty(); }
只真实调用该方法,不调用其他方法如 initData() 等, 使用
PowerMockito.doCallRealMethod()调用真实的方法, 测试类前添加@RunWith(PowerMockRunner.class)
@
Test public void should_setInfo_when_resetInfo() throws Exception { Presenter presenter=mock(Presenter.
class);
View view = mock(
View.
class); PowerMockito.doCallRealMethod().when(presenter).resetInfo(
"000222"); presenter.resetInfo(
"000222"); verify(
view).setInfo(
"000222"); }
验证方法时,需要模拟其他
方法调用的返回值,使用
Mockito.when(MockObject.method(Mockito.any(Object))).thenReturn(object);
@
Test public void should_setText_when_setText() throws Exception { Presenter presenter=spy(Presenter.
class);
View view = mock(
View.
class); when(
view .getDay(anyString())).thenReturn(7); presenter.setText(); verify(
view).setInfo(
"000222"); }
验证
网络请求onSuccess
回调方法,使用
ArgumentCaptor PS:验证调用单例类的方法,需使用
PowerMockito.mockStatic(Method)
@
Test public void should_onSuccess_when_doRequest() throws Exception { repository = mock(Repository.
class); PowerMockito.mockStatic(Repository.
class); when(Repository.getInstance()).thenReturn(repository); Presenter presenter=spy(Presenter.
class);
View view = mock(
View.
class); String username =
"147260"; String password =
"123456"; presenter.doRequest(username, password); ArgumentCaptor<BaseHttpRequestListener> captor = ArgumentCaptor.forClass(BaseHttpRequestListener.
class); verify(repository).doRequest(
eq(
"147260"),
eq(
"123456"), captor.
capture()); captor.getValue().onSuccess(result); verify(
view).loginSuccess(); }
验证方法抛出
异常 @Test(expected = Exception.class)
@
Test(expected = NullPointerException.
class) public void should_throw_Exception_when_setText() throws Exception { Presenter presenter=spy(Presenter.
class);
View view = mock(
View.
class); presenter.setText(); verify(
view).setInfo(
"000222"); }
模拟调用方法时的
参数匹配
when(mockedList.get(anyString())).thenReturn(element); anyString()匹配任何int参数,这表示参数为任何值,均返回 7
@
Test public void should_setDay_when_setDay() throws Exception { Presenter presenter=spy(Presenter.
class);
View view = mock(
View.
class); when(
view .getDay(anyString())).thenReturn(7); presenter.setDay(); verify(
view).setDay(7); }
模拟方法调用
次数 time调用次数: verify(mock,times(n)).method();
atLeast至少调用的次数: verify(mock,atLeast(n)).method();
atLeastOnce最少调用一次: verify(mock,atLeastOnce()).method();
atMost最多调用次数: verify(mock,atMost(n)).method();
@
Test public void should_throw_Exception_when_setText() throws Exception { Presenter presenter=spy(Presenter.
class);
View view = mock(
View.
class); presenter.setDate(); verify(
view,times(2)).setDate(7); }