不通过GwtTestCase测试GWT

作者:佚名

原文链接:http://googletesting.blogspot.tw/2009/08/tott-testing-gwt-without-gwttest.html

由于GWT(Google Web开发工具集)是新的,而且令人兴奋的是它很容易让人忽略那些累积了三十多年的GUI代码结构。

GwtTestCase 很适合测试那些用Javascript编写的特定UI的代码。但如果用GwtTestCase你会发现测试非UI客户端逻辑,你可能没有一个很清晰的视图/视图处理分离方式。独立的视图层和视图处理层有利于多模块化,有更容易测试的代码并且更短的测试时间。这里介绍如何把它们应用到一个GWT应用中。

术语定义:

Server- 一个完全不依赖于GWT的标准后端。

Model- 数据层。可以在客户端和服务端共享,或者如果合适的话,你可以为客户端弄一个不同的数据层。数据层同样不依赖GWT

View- 视图层。通过包装GWT小部件的视图类,从你剩余的代码中隐藏它们。该层不考虑逻辑,无状态,都是可以很容易被mock化的。

Presenter -视图处理层,所有客户端逻辑和状态;它和服务端交互,并通知视图要做什么。它使用来自GWT的RPC机制,但不包括部件。

视图处理层,包含了所有感兴趣的客户端代码,是完全可以通过Java测试的。

public void testRefreshPersonListButtonWasClicked() {

IMocksControl easyMockContext = EasyMock.createControl()

mockServer = easyMockContext.createMock(Server.class);

mockView = easyMockContext.createMock(View.class);

List franz = Lists.newArrayList(new Person("Franz", "Mayer"));

mockServer.getPersonList(AsyncCallbackSuccessMatcher<list<person>>reportSuccess(franz)));

mockView.clearPersonList());

mockView.addPerson(“Franz”, “Mayer”);

easyMockContext.replay();

presenter.refreshPersonListButtonClicked();

easyMockContext.verify();

}

 测试失败的用例,现在可以像改变预期结果一样简单。通过在以下期望值之间切换,上面的测试可以执行一条成功的和两条服务端失败的测试。我们输出一条错误信息。


mockServer.getPersonList(AsyncCallbackFailureMatcher<list<person>>reportFailure(failedExpn))
expectLastCall().times(2); // Ensure the presenter tries twice

mockView.showErrorMessage(“Sorry, please try again later”));

你还需要一个端到端测试。但所有的逻辑是要可测的,并且是小而快的测试。

源码是开源的,可以从以下地址下载:

1.    AsyncCallbackSuccessMatcher.java.

http://code.google.com/p/gwt-callback-matchers-for-easymock/source/browse/trunk/src/AsyncCallbackSuccessMatcher.java

2.AsyncCallbackFailureMatcher.java.

http://code.google.com/p/gwt-callback-matchers-for-easymock/source/browse/trunk/src/AsyncCallbackFailureMatcher.java

考虑到可以利用测试驱动开发(TDD)去开发视图处理层。它趋向于更高的测试覆盖率,更快以及更重要的测试,以及更好的代码结构。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值