我是gwt,mvp和easymock的新手。我正在使用MVP模式构建一个应用程序,其中presenter正在调用远程RestService。我想测试使用EasyMock调用远程服务的presenter函数。目前,我的代码看起来像
expect(applicationView.get()).andReturn(5);
applicationPresenter.setView(applicationView);
replay(applicationView);
MyRestService mService = createNiceMock(MyRestService.class);
applicationPresenter.setMyRestService(mService);
applicationPresenter.fetchAllBooks();
verify(applicationView);
我成功运行测试和测试通过。我做对了吗?如何测试响应,因为service是一个RestService接口,它在MethodCallback中返回响应。我的服务界面如下:
@Path("/rest-service")
public interface MyRestService extends RestService {
@Path(value="/getAllBooks")
@GET
void getAllBooks(MethodCallback<List<Book>> callback);
请帮助我的演示者和服务器调用测试程序是正确的吗?如何测试响应并将值传递给Application视图?我是否需要传递值才能查看或仅模拟值?
此致
答案 0 :(得分:0)
我对REST服务并不是很了解,但是以get
开头并返回void的Web服务对我来说似乎很奇怪。
除此之外,您需要预期拨打getAllBooks
,因为您的服务是模拟的。
从它的外观来看,fetchAllBooks
方法实例化MethodCallBack
,然后将其提供给模拟服务。因此,如果您希望对其进行更改,以便在fetchAllBooks
方法继续时处于某种预期状态,则可以使用预期的andAnswer()
。
这样的事情可以解决问题:
MyRestService mService = createNiceMock(MyRestService.class);
mService.getAllBooks(EasyMock.isA(MethodCallcack.class));
EasyMock.expectLastCall().andAnswer(new IAnswer() {
@Override
public Object answer() throws Throwable {
final Object[] currentArguments = EasyMock.getCurrentArguments();
MethodCallback callback = ((MethodCallback)currentArguments[0]);
//Set whatever you need to on your MethodCallback so that the data makes it back.
return null;
}
});
//Don't forget to replay
EasyMock.replay(mService);
关于此类事件here也有一个很好的堆栈溢出帖子