2012-03-02 49 views
1

在我们的SmartGWT Web应用程序中,我们将域对象从服务器传递到客户端并返回(通过GWT序列化)。要在DynamicForm或GridList中显示/编辑客户端的数据,我们必须将其转换为Record(或ListGridRecord),并在编辑回我们的域对象之后。单元测试如何使用SmartGWT类?

我想编写一个单元测试这种转换方法,但在JUnit的一个简单的尝试失败,因为记录的getAttributesetAttribute方法由JSOHelper.getAttribute/JSOHelper.setAttribute,这是宣布为native并实现静态方法来实现由JSNI在JavaScript中进行编译,因此只有在编译为JavaScript时才可用于客户端。

从JUnit使用这些方法时,我们得到一个UnsatisfiedLinkError,因为本地方法没有在那里实现。

任何想法我可以测试这些类吗?

这些关键方法可以通过简单的HashMap轻松实现(如果属性顺序很重要,也可以是LinkedHashMap) - 实际上JavaScript对象就是关于这个的,如果只看数据部分而不是方法。因此,我只是考虑用Java实现而不是JavaScript提供一些选定的SmartGWT类(主要是JSOHelper)的替代实现。

但我真的是第一个有这个问题的人吗?我是不是很傻,找不到现有的解决方案?

+0

相关(但这里没有真正帮助):[GWT:单元测试/模拟JSNI方法的最佳实践?](http://stackoverflow.com/questions/2543462/gwt-best-practice-for-unit -testing-mocking-jsni-methods) – 2012-03-02 19:09:00

回答

0

如果您在代码中使用了MVP或MVC模式,只需模拟mockito之类的视图代码并测试应用程序的所有其余部分。要测试视图代码,您将需要使用类似Selinium的东西我不认为gwtTestCase可以与smartGWT一起使用,因为它只是一个围绕js代码的gwt包装。

+0

我们使用MVP,但是我想测试的这个类实际上是视图的一部分(或者可以被认为是这样)。它只涉及纯数据类(无GUI),但涉及由JavaScript对象表示的数据类,这是此处的问题。 – 2012-03-02 22:44:57

+0

也许你可以编写未解决方法的java版本。 – Deanna 2012-03-03 00:15:31

+0

是的,那是我的想法,但我希望别人已经做到了,因此我的问题在这里。 – 2012-03-03 01:41:37