栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

GWT模拟框架的全面利弊

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GWT模拟框架的全面利弊

对于服务器端测试(RPC服务),您可以使用所需的任何模拟框架。弹簧测试库对于模拟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应用程序遵循Model View Presenter模式,则可以为GWT客户端代码创建单元测试。假设我们正在测试所谓的“
Presenter”(逻辑),我们可以使用任何模拟框架对所谓的“ Display”进行模拟。这是使用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);    }}

在“时间”部分而不是button.click()调用presenter.showResult()很有道理,但是您可以看到事件循环的模拟也是可能的。

Google GIN可能非常有用,因为它允许根据运行时/测试上下文来绑定不同的实例。在非GWTTestCase演示者上,测试GIN可以替换为Guice。

com.google.gwt.junit.GWTMockUtilities可能也非常有用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号