作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经完成了大部分GWT MVP风格的测试,而没有测试小部件。我希望能够构建更复杂的小部件并对其进行良好的测试,而无需使用GwtTestCase
(缓慢)。
出于好奇,我尝试了一个非常简单的测试。给一个非常简单的小部件,就像这样(这不是我的确切类,只是一个简化的示例):
public class MyWidget extends Composite {
private TextBox boxOne, boxTwo;
public MyWidget() {
boxOne = new TextBox();
boxTwo = new TextBox();
VerticalPanel panel = new VerticalPanel();
panel.add( boxOne );
panel.add( boxTwo );
initWidget( panel );
}
public String[] getText() {
return new String[] { boxOne.getText(), boxTwo.getText() }
}
}
public class MyWidgetTest {
private ConstantsWithLookup constants;
private MyWidget widget;
@Before
public void createMocks() {
GwtMockito.initMocks( this );
constants = mock( ConstantsWithLookup.class );
}
@Test
public void testIsInvalidByDefault() {
widget = new MyWidget( constants ) {
protected void initWidget(Widget w) {
// Disarm for testing
}
};
assertNotNull( widget );
}
@After
public void tearDown() {
GwtMockito.tearDown();
}
}
java.lang.UnsatisfiedLinkError: com.google.gwt.dom.client.Document.nativeGet()Lcom/google/gwt/dom/client/Document;
at com.google.gwt.dom.client.Document.nativeGet(Native Method)
at com.google.gwt.dom.client.Document.get(Document.java:46)
at com.google.gwt.user.client.ui.TextBox.<init>(TextBox.java:78)
at mypackage.MyWidget.<init>(MyWidget.java:linenumber)
... etc ...
java.lang.NoSuchFieldError: NULL
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:57)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
at com.google.gwtmockito.GwtMockitoTestRunner.<init>(GwtMockitoTestRunner.java:114)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
BlockJunit4ClassRunner
,从4.5开始被标记为@。
Composite
/
IsWidget
从较小的小部件构建的复杂小部件吗? GWTMockito是否应该帮助我解决JSNI问题,或者我读错了什么?仅仅是因为我没有使用测试运行器吗?
最佳答案
从我的角度来看,有两种可能性:
您忘记使用GwtMockito的JUnit运行器:
@RunWith(GwtMockitoTestRunner.class)
public class MyTest {
// ...
}
GWT.create
实例化窗口小部件。
GWT.create
实例化。对于UiBinder来说,这很简单-内部,UiBinder模板中定义的所有小部件都使用
GWT.create
实例化,因此您无需进行任何更改即可将其与GwtMockito一起使用。但是,如果您不使用UiBinder(或者是
providing
您自己的窗口小部件实例),则除非您使用
GWT.create
实例化窗口小部件,否则GwtMockito将无法发挥其魔力。
GWT.create
实例化-成员也是如此。这就是GwtMockito进入小部件的“方式”。如果仅调用
new TextBox()
,则无法用模拟代替它。
GWT.create
的调用)。
public class MyWidget extends Composite {
private TextBox boxOne, boxTwo;
public MyWidget() {
boxOne = GWT.create(TextBox.class);
boxTwo = GWT.create(TextBox.class);
VerticalPanel panel = GWT.create(VerticalPanel.class);
panel.add( boxOne );
panel.add( boxTwo );
initWidget( panel );
}
public String[] getText() {
return new String[] { boxOne.getText(), boxTwo.getText() };
}
}
GWT.create
实例化合成中的所有小部件
mock
或
GWT.create
创建)
关于gwt - GWTMockito UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26308676/
我已经完成了大部分GWT MVP风格的测试,而没有测试小部件。我希望能够构建更复杂的小部件并对其进行良好的测试,而无需使用GwtTestCase(缓慢)。 出于好奇,我尝试了一个非常简单的测试。给一个
我是一名优秀的程序员,十分优秀!