2011-10-28 39 views
3

JUnit 4.8.1でGWT 2.4を使用しています。 GWTTestCaseを拡張するクラスを作成するときに、ページ上のボタンをクリックしてシミュレートする必要があります。現在、私のonModuleLoadメソッドでは、このボタンはローカルのみのフィールドです...GWT TestCase:私のページのボタンをクリックしてシミュレートする

public void onModuleLoad() { 
    final Button submitButton = Button.wrap(Document.get().getElementById(SUBMIT_BUTTON_ID)); 
    ...  

    // Add a handler to send the name to the server 
    GetHtmlHandler handler = new GetHtmlHandler(); 
    submitButton.addClickHandler(handler); 

は、どのように私はGWTTestCaseから、このボタンをクリックしてシミュレートしていますか?このボタンをパブリックメンバーのアクセサーとして公開する必要がありますか?もっとエレガントな方法でアクセスできますか?デイブ

答えて

2

それはbuttonElement.click()(またはButtonElement.as(buttonWidget.getElement()).click()、またはButtonElement.as(Document.get().getElementById(SUBMIT_BUTTON_ID)).click())と同じくらい簡単にすることができ

しかし、それを覚えている - ここに私は私のテストケースには、これまで...

public class GetHtmlTest extends GWTTestCase { 

    // Entry point class of the GWT application being tested. 
    private Productplus_gwt productPlusModule; 

    @Override 
    public String getModuleName() { 
     return "com.myco.clearing.productplus.Productplus_gwt"; 
    } 

    @Before 
    public void prepareTests() { 
     productPlusModule = new Productplus_gwt(); 
     productPlusModule.onModuleLoad(); 
    } // setUp 

    @Test 
    public void testSuccessEvent() { 
     // TODO: Simulate clicking on button 
    } // testSuccessEvent 

} 

おかげで、持っているものですGWTTestCaseは独自のHTMLホストページでは実行されませんが、空のページであるため、まずモジュールの負荷をシミュレートする前にページ内にボタンを挿入する必要があります。

2

gwt-test-utilsは、あなたのニーズに答えるのに最適なフレームワークであるようです。代わりにGWTTestCaseから継承するの、GWT-TEST-utilsのGwtTestにクラスを拡張し、getting starting guideに示すように、ブラウザのクラスを使用してクリックテストを実装する:あなたはプライベートあなたのボタンを維持したい場合は

@Test 
public void checkClickOnSendMoreThan4chars() { 
    // Arrange 
    Browser.fillText(app.nameField, "World"); 

    // Act 
    Browser.click(app.sendButton); 

    // Assert 
    assertTrue(app.dialogBox.isShowing()); 
    assertEquals("", app.errorLabel.getText()); 
    assertEquals("Hello, World!", app.serverResponseLabel.getHTML()); 
    assertEquals("Remote Procedure Call", app.dialogBox.getText()); 
} 

あなたはイントロスペクションでそれを取得することができます。しかし、私のアドバイスは、ビューのウィジェットパッケージが保護されていることと、同じパッケージにユニットテストを書き込んでアクセスできるようにすることです。より説得力があり、リファクタリングに優しい。

gwt-test-utilsはイントロスペクションの納得感を提供します。

DialogBox dialogBox = GwtReflectionUtils.getPrivateFieldValue(app, "dialogBox"); 

をしかしGwtReflectionUtilsを使用することは必須ではありませんのでご注意:たとえば、プライベートされている可能性「ダイアログボックス」フィールドを取得するために、あなたが持っている可能性があり、これを行います。テスト-utilsのGWT制限なく、あなたはGWTクライアントサイドのテストで任意のJavaクラスを使用することができます:)

+0

GWT-テスト-utilsのGWTTestCaseで使用することができますか?彼らは互換性がありますか? – iTake

0

あなたはこのようにそれを行うことができます。

YourComposite view = new YourComposite(); 
RootPanel.get().add(view); 

view.getSubmitButton.getElement().<ButtonElement>cast().click(); 
関連する問題