ウィジェットをテストせずに、MVP スタイルの GWT テストのほとんどを行いました。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() }
}
}
そして、私はGWTMockitoテストを次のように少し使用しています:
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 ...
私はテスト ランナーを使用していないことに気付くでしょう。試してみましたが、これをテストしているプロジェクトは JUnit 4.4 を使用しており、テスト ランナーは JUnit 4.4 では動作しないようです。GwtMockitoTestRunner を使用すると、次のようになります。
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)
別のスタック オーバーフローの質問と簡単な調査に基づいて、これはこのプロジェクトで使用されている JUnit のバージョンに関係していると思われます。GwtMockito はBlockJunit4ClassRunner
、@since 4.5 とマークされた を使用します。
では、このテストは GWTMockito が支援するようなものでしょうか? 私は GWTMockito をまったく初めて使用するので、簡単な誤解を招く可能性がありますが、理解したいと思います。
GWTMockito を使用して、Composite
/を使用して小さなウィジェットから構築された複雑なウィジェットをテストできますIsWidget
か? GWTMockito はこの JSNI の問題を解決するのに役立ちましたか? テストランナーを使用していないからですか?