我有興趣爲我的GWT應用程序使用正確的嘲笑框架。我的理解是Mockito,EasyMock和jMock是Java中最受歡迎的程序。是否有人列出了他們最熟悉的模擬框架的優點/缺點,因爲它與GWT有關,可以幫助像我這樣的GWT測試noobs?GWT嘲笑框架的綜合優點/缺點
在此先感謝。
我有興趣爲我的GWT應用程序使用正確的嘲笑框架。我的理解是Mockito,EasyMock和jMock是Java中最受歡迎的程序。是否有人列出了他們最熟悉的模擬框架的優點/缺點,因爲它與GWT有關,可以幫助像我這樣的GWT測試noobs?GWT嘲笑框架的綜合優點/缺點
在此先感謝。
對於服務器端測試(RPC服務),您可以使用任何您希望的模擬框架。 spring-test庫可能會用於模擬HttpRequest,HttpSession和其他類的servlet api。您仍然可能在擴展RemoteServiceServlet的測試類時遇到問題,因爲它們需要正確編碼的請求。這是有趣的項目,它解決了這個問題:
http://www.gdevelop.com/w/blog/2010/01/10/testing-gwt-rpc-services/
當涉及到的客戶端GWT代碼(編譯爲Java腳本的部分)的測試,你可以擴展GWTTestCase。然而,由於JRE庫的模擬有限,特別是缺乏反射API,所以不可能使用任何模擬框架。更重要的是,GWTTestCase運行時非常慢,因此考慮作爲集成測試的基礎而不是單元測試。
如果GWT應用程序遵循模型視圖展示器模式,則可以爲GWT客戶端代碼創建單元測試。假設我們正在測試所謂的「演示者」(邏輯),我們可以用任何模擬框架來嘲笑所謂的「顯示」。下面是使用例子的Mockito單元測試:
import static org.mockito.BDDMockito.*;
import org.junit.Test;
import com.google.gwt.user.client.ui.HasText;
public class ResultPresenterTest {
@Test
public void shouldSetItWorksResultText() {
// given
ResultPresenter.Display display = mock(ResultPresenter.Display.class);
MockButton button = new MockButton();
HasText label = mock(HasText.class);
given(display.getShowResultButton()).willReturn(button);
given(display.getResultLabel()).willReturn(label);
ResultPresenter presenter = new ResultPresenter();
presenter.bind(display);
// when
button.click();
// then
verify(label).setText("It works");
}
}
這裏是主持人:
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.user.client.ui.HasText;
public class ResultPresenter {
private Display display;
public interface Display {
HasClickHandlers getShowResultButton();
HasText getResultLabel();
}
public void bind(final Display display) {
this.display = display;
display.getShowResultButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showResult();
}
});
}
public void showResult() {
display.getResultLabel().setText("It works");
}
}
,這裏是小助手類:
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
public class MockButton implements HasClickHandlers {
private HandlerManager handlerManager = new HandlerManager(this);
public void click() {
handlerManager.fireEvent(new ClickEvent() {
});
}
@Override
public HandlerRegistration addClickHandler(ClickHandler handler) {
return handlerManager.addHandler(ClickEvent.getType(), handler);
}
@Override
public void fireEvent(GwtEvent<?> event) {
handlerManager.fireEvent(event);
}
}
這將是有意義的調用presenter.showResult ()在'when'部分而不是button.click()中,但是你可以看到事件循環的嘲弄也是可能的。
Google GIN可能非常有用,因爲它允許根據運行時/測試上下文綁定不同的實例。在非GWTTestCase演示者測試中,GIN可以替換爲Guice。
com.google.gwt.junit.GWTMockUtilities可能也非常有用。
我們很高興爲我們的GWT項目使用Gwt-test-utils。
嘲諷的RPC的Mockito要求是很容易的:
首先你宣佈你嘲笑的服務在您的測試:
@Mock
private ServiceAsync service;
那麼當你需要模擬一個成功的回調:
doSuccessCallback(result).when(service).myMethod(eq("argument"), any(AsyncCallback.class));
更多關於:http://code.google.com/p/gwt-test-utils/wiki/MockingRpcServices