1

コンストラクターでいくつかのパラメーターを受け取るいくつかのパネルを含むページを取得しました。それらの1つは、メニュー内のさまざまなボタンのリストを取得するメニューです。

コンポーネントとしてテストしようとしましたが、nullポインタ例外が発生します。ダミーページを使用して、ダミーページにパネルを作成すると機能します。このアプローチでは、テストに多くの新しいコードが導入され、エラーが発生する可能性が高くなるため、完全に満足しているわけではありません。

コンストラクターで引数を取るパネルをテストするより良い方法はありますか?


確かに:nullポインタエラーを与えるコード:

public void testVisitPanel(){
    VisitPanel v = new VisitPanel("visitPanel");
    tester.startComponent(v);
    tester.assertContains("DATE");
}

パネル

public VisitPanel(String id) {
    super(id);
    add( new Label("visitDate", "DATE"));
    add( new Label("visitStage", "VISIT SIGNED"));
}

そしてhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:wicket="http://wicket.sourceforge.net/" 
    xml:lang="en" 
    lang="en">  
<wicket:head>
</wicket:head>

<body>
    <wicket:panel>
        <span wicket:id="visitDate">VISIT DATE</span>
        <span wicket:id="visitStage">STAGE</span>
    </wicket:panel>
</body>
</html>
4

1 に答える 1

3

Wicket 1.4 を使用している場合は、おそらくwicketTester.startPanel.

私がしていることはITestPanelSource、次のようなことをして、テストでの実装を作成することです:

private class TestPanelSource implements ITestPanelSource {

    private static final long serialVersionUID = 1L;

    public Panel getTestPanel(String panelId) {
        return new MyPanel(panelId, myArg1, myArg2);
    }

}

コンストラクターに適したテストクラス(多くの場合モック)のビーイングフィールドを使用して、テストまたはメソッドでmyArgNそれを呼び出しますsetUp

wicketTester.startPanel(new TestPanelSource());

これは基本的に DummyPage の作業の一部を行っているため、現在行っていることからそれほど遠くないかもしれませんが、少なくともテスト インフラストラクチャのダミー ページの実装を節約できる可能性があります。

Wicket 1.5 では、質問で参照したコンポーネントのテストを支持して、これは非推奨です。それも機能するはずなので、その手法で問題を引き起こしている実際のコードを投稿する価値があるかもしれません.

于 2011-10-14T21:43:00.197 に答える