繁体   English   中英

Android单元测试:如何模拟作为参数发送到异步方法的侦听器?

[英]Android Unit Test: How to mock a listener that is sent as argument to an asynchronous method?

我有一个接收带有onSuccess(result)和onFail(error)方法的侦听器(接口)的方法。
测试的方法执行一些操作(在另一个线程上)并最终使用答案调用侦听器。

方法本身的示例代码(不是测试):

testedObject.performAsyncAction("some data", new IListener(){
    @Override
    public void onSuccess(int result) {
        if (result == 1) { /* do something */ }
        else if (result == 2) { /* do something else */ }
    }

    @Override
    public void onFailure(Error error) {
        if (error.getMessage().equals("some error")) { /* do something */ }
        else if (error.getMessage().equals("another error")) { /* do something else */ }
    }
});

我想对这个方法进行一些测试:

  • 调用onSuccess(1)时成功
  • 调用onSuccess(2)时成功
  • 调用onFailure(新错误(“某些错误”))时成功
  • 调用onFailure(新错误(“另一个错误”))时成功

谢谢!

对于这种情况,我使用Mockito Answer对象。 这将是对成功案例的考验:

Answer<Void> myAnswer = new Answer<Void>() {
    public Void answer(InvocationOnMock invocation) {
       Callback callback = (Callback) invocation.getArguments()[1]; // second argument in performAsyncAction 
       callback.onSuccess(1); // this would be 1 or 2 in your case
       return null;
    }
};

doAnswer(myAnswer).when(testedObject).performAsyncAction("some data", any(Callback.class));

对于失败案例,只需创建另一个具有不同答案的测试。 有关详细信息,请查看此博文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM