2

これをモックする必要があります:

 void handleCellPreview(CellPreviewEvent<List<String>> event) {
    Element cellElement = event.getNativeEvent().getEventTarget().cast();
 }

私はこれをやっています:

CellPreviewEvent<List<String>> cellPreviewEvent = Mockito.mock(
        CellPreviewEvent.class, Mockito.RETURNS_DEEP_STUBS);
Element cellElement = Mockito.mock(Element.class, Mockito.RETURNS_DEEP_STUBS);
EventTarget eventTarget = Mockito.mock(EventTarget.class);
  Mockito.when(cellPreviewEvent.getNativeEvent().getEventTarget().cast()).thenReturn(cellElement);


そして、次のエラーが発生しています:

testHandleCellPreview(client.view.MyViewTest)java.lang.NullPointerException
    at com.google.gwt.dom.client.NativeEvent.getEventTarget(NativeEvent.java:137)
    atclient.view.MyViewTest.testHandleCellPreview(MyViewTest.java:76)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


以下の同じ質問も見ました: 連鎖
呼び出しのモックまたはスタブ ありがとう、 モヒット




4

2 に答える 2

1

問題は、クライアントブラウザ環境の外でGWTコードを実行しようとしていることだと思います。GWTは、JavaScriptに変換され、ブラウザーで実行されるように設計されています。それ以外の方法で機能するかどうかはわかりません。

NativeEventの137行目がであるように見えることに気づきましたDomImpl.impl.eventGetTarget。これは私にそれがであると信じDomImpl.implさせるnull

コードを調べて、次のことがわかりました。

45  public static <T> T create(Class<?> classLiteral) {
46     if (sGWTBridge == null) {
47       /*
48        * In Production Mode, the compiler directly replaces calls to this method
49        * with a new Object() type expression of the correct rebound type.
50        */
51       throw new UnsupportedOperationException(
52           "ERROR: GWT.create() is only usable in client code!  It cannot be called, "
53               + "for example, from server code.  If you are running a unit test, "
54               + "check that your test case extends GWTTestCase and that GWT.create() "
55               + "is not called from within an initializer or constructor.");
56     } else {
57       return sGWTBridge.<T> create(classLiteral);
58     }
59   }

延長しましたかGWTTestCase

于 2012-10-22T11:32:48.577 に答える
-1

親エンティティでモック化されたオブジェクトを再度設定する必要があります。そのため、実行時にモック化されたオブジェクトが使用されます。

cellPreviewEvent.setCellElement(cellElement);
cellPreviewEvent.setEventTarget(eventTarget);

完全なコードは次のようになります。

CellPreviewEvent<List<String>> cellPreviewEvent = Mockito.mock(
        CellPreviewEvent.class, Mockito.RETURNS_DEEP_STUBS);
Element cellElement = Mockito.mock(Element.class, Mockito.RETURNS_DEEP_STUBS);
EventTarget eventTarget = Mockito.mock(EventTarget.class);
cellPreviewEvent.setCellElement(cellElement);
cellPreviewEvent.setEventTarget(eventTarget);
  Mockito.when(cellPreviewEvent.getNativeEvent().getEventTarget().cast()).thenReturn(cellElement);
于 2012-10-22T09:01:01.330 に答える