0

私は次のような改札クラスを持っています:

public class MyReport extends AbstractReport {

    private static final long serialVersionUID = 1L;


    public MyReport(PageParameters parameters) throws ParseException {
        super(parameters);
        try {

        } catch (ParseException e) {
            throw new RuntimeException("Missing from/to date");
        }
    }

    @Override
    protected void onInitialize() {
        super.onInitialize();
        setPageHeader();
    }

    protected void setPageHeader() {
        add(new TaxHeader("pageHeader")); //TaxHeader extends Panel

    }

    protected void setPageFooter(CustomerDTO customerInfoForFooter) {
       //TO BE ADDED

     }

}

HTMLマークアップはこんな感じ

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<wicket:head>
    <title><wicket:message key="k4.title">Title</wicket:message></title>
    <meta name="author" content="abc" />

    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <wicket:link>
        <link rel="stylesheet" type="text/css" href="general.css" media="all" />
    </wicket:link>
</wicket:head> 

<BODY>
    <div id="pageHeader" class="pageHeader" wicket:id="pageHeader" >HEADER</div>
       <div id="pageFooter" class="pageFooter" wicket:id="pageFooter" >FOOTER</div>


   </BODY>
   </html>

テストクラスはこんな感じ

public class ReportTest extends WicketTestBase {

@Test
public void reportShouldRenderCorrectly() {
    tester.startPage(MyReport.class, new PageParamenters());
    tester.assertRenderedPage(MyReport.class);
}

}

私が望むのは、ページを作成してテストすることで、テスト駆動型になることです。setPageHeader()つまり、メソッドをsetPageFooter()互いに別々にテストしたいということです。何かのようなもの

@Test
public void pageHeaderShouldRenderCorrectly()

ただし、これは不可能です。ウィケットはページをロードせず、'pageFooter' ウィケット タグがコンポーネントで設定されていないと文句を言うからです。ご想像のとおり、多くの wicket 参照を含む複雑な HTML ページの場合、上記のテストを実行する前にそれらすべてが満たされていることを意味します。

これを回避する方法はありますか?TaxHeaderコンポーネント (つまり、この場合はクラス)のテストを終わらせたくないことに注意してください。私が望むのは、ウィケットのレンダリングをテストすることです。

4

1 に答える 1

0

これはあなたの質問に対する正確な回答ではありませんが、とにかく役立つかもしれません...

自分で見つけたように、そのままのコードはあまりテストできません。テストしやすくするには、メソッドの密結合を取り除く必要があります。setPageHeaderメソッドを次のように変更します

protected void setPageHeader(Component parent) {
    parent.add(new TaxHeader("pageHeader")); //TaxHeader extends Panel
}

これは改善されますが、クラスのドメインに属しているため、TaxHeaderそこに移動する必要があり、驚くべき (したがって読みにくい) コードフローが発生します。

一方で... このメソッドを本当にテストする必要があるかどうか自問してください。確かに 100% のコード カバレッジは素晴らしいように見えますが、努力する価値はほとんどなく、意味のあることはさらにまれです。このメソッドは 2 つのことを行います。

  • これは wicket のadd-method を呼び出します。その機能は当然のことと考えられます (そして、それをテストするのは wicket 開発者の仕事です)。使用状況はコンパイラによってチェックされ、結果は page-rendering-test によってチェックできます
  • これはコンストラクターを呼び出します。これはテスト可能であり、テストする必要がありますが、ページ テストのコンテキストではありません。これは、WicketTester の startComponentInPage メソッドを使用して簡単に実行できる独自のテストに値します。
于 2013-09-19T07:38:51.850 に答える