5

並べ替え可能な DataTable をターゲットとするウィケット テストがいくつかあります。具体的には、並べ替え可能な列ヘッダーを ajax クリックし、レンダリングされた本文行の内容をアサートします。テーブル コンポーネントの子孫のコンポーネント階層が wicket フレームワークによって自動生成され、次のような並べ替えリンク (ajax) へのパスが生成されます。

table:topToolbars:toolbars:0:headers:1:header:orderByLink

ただし、DataTable がテスト全体で再レンダリングされると、ツールバー コンポーネントのインデックスが毎回インクリメントされます。つまり、次のようになります。

table:topToolbars:toolbars:1:headers:1:header:orderByLink

その後、一致しなくなるため、後続のテストのハードコードされたパスが壊れます。

データテーブル構築のコード フラグメントは次のとおりです。

        final PayeesProvider dataProvider = new PayeesProvider();
    table = new DataTable<ResponsePayeeDetails>("payees", columns, dataProvider, rowsPerPage);
    table.setOutputMarkupId(true);
    table.addTopToolbar(new AjaxFallbackHeadersToolbar(table, dataProvider) {

        private static final long serialVersionUID = -3509487788284410429L;

        @Override
        protected WebMarkupContainer newSortableHeader(final String borderId, final String property, final ISortStateLocator locator) {
            return new AjaxFallbackOrderByBorder(borderId, property, locator, getAjaxCallDecorator()) {

                @Override
                protected void onRender() {
                    System.out.printf("Path: %s\n", this.getPageRelativePath());
                    super.onRender();
                }

                private static final long serialVersionUID = -6399737639959498915L;

                @Override
                protected void onAjaxClick(final AjaxRequestTarget target) {
                    target.add(getTable(), navigator, navigatorInfoContainer);
                }

                @Override
                protected void onSortChanged() {
                    super.onSortChanged();
                    getTable().setCurrentPage(0);
                }
            };
        }
    });
    table.addBottomToolbar(new NoRecordsToolbar(table));
    add(table);

正確には、テストを実行すると、上記の System.out.printf ステートメントが出力されます。

(1次試験)

Path: payees:topToolbars:toolbars:0:headers:1:header
Path: payees:topToolbars:toolbars:0:headers:2:header

(2次試験)

Path: payees:topToolbars:toolbars:2:headers:1:header
Path: payees:topToolbars:toolbars:2:headers:2:header

(3次試験)

Path: payees:topToolbars:toolbars:4:headers:1:header
Path: payees:topToolbars:toolbars:4:headers:2:header

(4回目のテスト)

Path: payees:topToolbars:toolbars:6:headers:1:header
Path: payees:topToolbars:toolbars:6:headers:2:header
Path: payees:topToolbars:toolbars:6:headers:1:header
Path: payees:topToolbars:toolbars:6:headers:2:header
Path: payees:topToolbars:toolbars:6:headers:1:header
Path: payees:topToolbars:toolbars:6:headers:2:header

(5回目のテスト)

Path: payees:topToolbars:toolbars:8:headers:1:header
Path: payees:topToolbars:toolbars:8:headers:2:header

インデックス生成をより決定論的/反復可能にする方法を知っている人はいますか? または、これらの増分の影響を受けないように、パスをワイルドカード化または一般化する方法はありますか?

どんな助けでも大歓迎です!

4

2 に答える 2

0

パスの決定は非常に難しい場合がありますが、これは単体テストではなく統合テストで構成されるため、必要ではありません。列の並べ替えのテストは、周囲のテーブルに依存してはならないため、テスト用にヘッダーと 1 つの列 (並べ替えられる列) を追加して、テストケースにダミー テーブルを作成できます。ツールバー オブジェクトがある場合は、すぐに使用するか、 を発行して再取得することができますgetComponent(toolbar.getPageRelativePath())。しかし、 が実際に機能することを保証することはAjaxFallbackOrderByBorder、このクラスのユーザーとしての関心事ではありません。これは、クラスの作成者が行う必要があります。独自のコード (データ プロバイダーの並べ替えコードなど) をテストするだけで済みます...

于 2012-04-26T09:47:15.173 に答える