GWT.create和wrap现有html元素

GWT.create和wrap现有html元素,gwt,gwtmockito,Gwt,Gwtmockito,是否可以使用GWT.create而不是构造函数创建文本框,并包装现有的HTML元素? 我试过: 上述操作在第(2)行失败,出现“无法设置元素两次…” 为了使用GwtMockito和测试需要创建文本框的组件,我需要这个 谢谢大家! 看来你不得不求助于某种工厂: public interface TextBoxFactory { TextBox wrap(Element element); } 这将被注入到视图中,您将使用工厂将现有元素包装到文本框中。当然,默认实现将只使用Baz建议的方法

是否可以使用
GWT.create
而不是构造函数创建文本框,并包装现有的HTML元素? 我试过:

上述操作在第(2)行失败,出现“无法设置元素两次…”

为了使用GwtMockito和测试需要创建文本框的组件,我需要这个


谢谢大家!

看来你不得不求助于某种工厂:

public interface TextBoxFactory {
    TextBox wrap(Element element);
}
这将被注入到视图中,您将使用工厂将现有元素包装到
文本框中。当然,默认实现将只使用Baz建议的方法。为了测试的目的,您将使用一个返回Mockito mock的实现


这不是最漂亮的解决方案,但考虑到目前的情况,我想不出一个“更干净”的解决方案。

UIObject有一个包保护的replaceElement方法,它可以做您想做的事情

在正确的包中构建包装,如下所示:

package com.google.gwt.user.client.ui;

import com.google.gwt.dom.client.Element;

public class ElementReplace
{
    public static void replaceElement(UIObject obj, Element elem)
    {
        obj.replaceElement(elem);
    }
}

而且可以访问该方法。

我对gwtmockito了解不多。所以你不能使用构造函数?你不能在这里使用依赖注入吗?我知道GIN会对您请求的任何元素调用GWT.create(),所以只需插入一个
提供程序
并调用
提供程序.get()
?@Baz gwtmockito只能模拟对GWT.create()的调用,它不知道如何模拟ctors@slugmandrew我已经更新了我的问题,代码实际上在(2)处失败因此,即使我有一个提供程序,它也只会创建组件,而不会创建setElement(…)@Dan您不能使用
TextBox#wrap(Element)
?确实,这是一个有趣的解决方法。然而,我担心的是在广泛使用这个应用程序
replaceElement
由于某种原因使包成为私有包。正如javadocs所说:“替换这个对象的浏览器元素。这个方法的存在只是为了支持图像中的特定用例,不应该被其他类使用。”它现在可以工作,但GWT团队可以在将来删除它,或者以一种会破坏你的应用程序的方式更改实现。我同意你的看法,这是一个肮脏的黑客,是不可恢复的,但对于一个测试环境,它应该是足够好的。
package com.google.gwt.user.client.ui;

import com.google.gwt.dom.client.Element;

public class ElementReplace
{
    public static void replaceElement(UIObject obj, Element elem)
    {
        obj.replaceElement(elem);
    }
}