我正在学习单元测试和模拟。我有 JUnit 运行,而不是使用模拟框架,我通过扩展现有的类和接口手动创建了模拟类。我想学习模拟框架 EasyMock,因为这就是我工作中可用的所有内容。虽然您可能会建议一些其他模拟框架,但它们对我不可用。
设置:
我有一个 View 和一个 Presenter 以及一个 API 后端。当用户单击一个按钮:“检查更新”时,视图会调用presenter.checkForUpdates()
执行调用api.checkForUpdates()
并期望回调的 。如果发生异常,api会通过回调通知presenter,controller会调用view方法view.showUserError()
。回调用于不返回参数,因为我们的 API 后端具有异步性质。
被测对象是Presenter
. 具体来说,我想测试View.showUserError()
在 Api 中发生异常时是否调用了该方法。我相信我可以模拟Api.checkForUpdates()
立即调用异常回调,而不是进行实际的网络调用。
问题是,我只看到 EasyMock 模拟返回值。例如:
EasyMock.expect(api.checkForUpdates()).andReturn(xxxx)
不会为我工作,因为api.checkForUpdates()
不返回任何东西,而是进行回调。我真正想做的是:
EasyMock.expect(api.checkForUpdates()).andExecute(exceptionCallback(NetworkError));
但我不知道该怎么做。有什么东西可以做我想做的事,还是我缺少一些基本的东西?
谢谢