Mockito - 在调用 void 方法时设置标志



我对Mockito有问题。我有一个看起来像这样的类:

public class Foo<T> {
   BaseView mView;
   public Foo(BaseView view) {
      mView = view;
   }
   public void onResponse(T data) {
      mView.setup(data);
   }
   public void onError(int error) {
      mView.displayError(error);
   }
}

好的,那我想做什么?

这是我想为 Foo 做的测试流程,

Foo嘲笑BaseView.如果调用了Foo onResponse错误,则返回 true。如果已调用Foo onError,则返回 false。

这是我已经尝试过的:

   public class BasePresenterCompatTest<T extends BasePresenterCompat> {
   private Boolean setupCalled;
   public void TestPresenterCall(BasePresenterCompat mPresenter) throws Exception {
       Mockito.doAnswer(new TrueAnswer()).when(Mockito.mock(mPresenter.getClass())).onResponse(Mockito.any());
       Mockito.doAnswer(new FalseAnswer()).when(Mockito.mock(mPresenter.getClass())).onError(Mockito.anyInt(), Mockito.anyString());
       Assert.assertEquals(true, setupCalled);
   }
   class TrueAnswer implements Answer<Boolean> {
       @Override
       public Boolean answer(InvocationOnMock invocation) throws Throwable {
           return setupCalled = true;
       }
   }
   class FalseAnswer implements Answer<Boolean> {
       @Override
       public Boolean answer(InvocationOnMock invocation) throws Throwable {
           return setupCalled = false;
       }
   }
 }

答案接口实现是否是一种好方法?因为我尝试调试测试,但它从未进入 Answer 类答案方法,所以我错过了什么?

哦,我

忘了添加,我使用上述方法得到的异常是:

      Wanted but not invoked.
     Actually, there were zero interactions with this mock.

测试此方案的常用方法...

mPresenter是项目中一个名为BasePresenter的类的实例,它调用带有回调的Retrofit Client,回调发送到"onResponse"方法中的BasePresenter数据或"onError"中的@StringRes整数。

。是模拟调用回调的任何内容,并验证是否对该模拟进行了正确的调用。

例如:

@Test
public void testMockInvocation() {
    BaseView baseView = Mockito.mock(BaseView.class);
    Foo<String> foo = new Foo(baseView);
    String input = "some input";
    foo.onResponse(input);
    Mockito.verify(baseView).setup(input);
    int error = 1;
    foo.onError(error);
    Mockito.verify(baseView).displayError(error);
}

由于setupdisplayError方法是键入的void它们无法返回任何内容,所以我怀疑这......

如果调用了 Foo onResponse 错误,则返回 true。如果调用了 Foo onError,则返回 false。

。指关于您的测试如何证明/验证在baseView上调用了正确方法的想法。如果是这样,则可以使用Mockito.verify()(如上例所示)来执行此操作。

最新更新