Unit testing EasyMock新手:如何重写一个方法以使其表现不同,而不仅仅是返回不同的值

Unit testing EasyMock新手:如何重写一个方法以使其表现不同,而不仅仅是返回不同的值,unit-testing,junit,easymock,Unit Testing,Junit,Easymock,我正在学习单元测试和模拟。我已经运行了JUnit,并且没有使用模拟框架,而是通过扩展现有的类和接口手动创建了模拟类。我想学习mocking框架EasyMock,因为这是我工作中的全部内容。虽然您可能会建议一些其他的模拟框架,但它们对我来说是不可用的 设置: 我有一个视图、一个演示者和一个API后端。当用户单击一个按钮:“检查更新”时,视图将调用presenter.CheckForUpdate(),它将调用api.CheckForUpdate(),并期望回调。如果发生异常,api将通过回调通知演示

我正在学习单元测试和模拟。我已经运行了JUnit,并且没有使用模拟框架,而是通过扩展现有的类和接口手动创建了模拟类。我想学习mocking框架EasyMock,因为这是我工作中的全部内容。虽然您可能会建议一些其他的模拟框架,但它们对我来说是不可用的

设置:

我有一个视图、一个演示者和一个API后端。当用户单击一个按钮:“检查更新”时,视图将调用
presenter.CheckForUpdate()
,它将调用
api.CheckForUpdate()
,并期望回调。如果发生异常,api将通过回调通知演示者,控制器将调用view方法
view.showUserError()
。由于命中API bac的异步性质,回调不会返回参数 肯德

被测试的对象是
演示者
。具体来说,我想测试当Api中发生异常时是否调用
视图.showUserError()
。我相信我可以模拟
Api.checkForUpdates()
来立即调用异常回调,而不是执行实际的网络调用

问题是,我只看到EasyMock模拟返回值。例如:

EasyMock.expect(api.checkForUpdates()).andReturn(xxxx)

不适用于我,因为
api.checkForUpdates()
不返回任何内容,而是执行回调。我真正想做的是:

EasyMock.expect(api.checkForUpdates()).andExecute(异常回调(NetworkError))

但我不知道该怎么做。有什么东西可以做我想做的,还是我缺少了一些基本的东西


谢谢

我认为您可以使用'Expect().和delegateto()'API创建存根


EasyMock是一个不错的选择:-)查看以获取更多信息

你可以打电话给我 第四行(例外回拨(网络错误),可能适合您的需要

如果您需要更强大的功能,andAnswer将允许您执行任何创建答案的操作。andDelegateTo也可能是一个不错的选择,但您必须实现一个类,该类实现与模拟相同的接口。这可能比您案例中的其他两个选项更复杂