2013-12-19 69 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

良好的堆棧溢出後