2013-12-19 65 views
0

我是gwt,mvp和easymock的新手。我正在使用MVP模式构建一个应用程序,其中演示者正在调用远程RestService。我想测试使用EasyMock调用远程服务的演示者功能。目前,我的代码看起来像演示者呼叫休息服务测试EasyMock

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); 

请帮我对主持人和服务器的过程调用的测试是正确的?如何测试响应并将值传递给应用程序视图?我是否需要传递值来查看或嘲笑这些值?

问候,

回答

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

良好的堆栈溢出后