演示者呼叫休息服务测试EasyMock

时间:2013-12-19 07:14:44

标签: gwt junit mvp easymock

我是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视图?我是否需要传递值才能查看或仅模拟值?

此致

1 个答案:

答案 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也有一个很好的堆栈溢出帖子