逐个测试检票口页面

时间:2013-09-18 15:53:56

标签: testing wicket

我有一个像这样的检票口:

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()

然而,这是不可能的,因为wicket不会加载页面并且抱怨没有使用组件设置'pageFooter'wicket标记。 可以想象,对于包含大量wicket引用的复杂HTML页面,这意味着在运行上述测试之前,所有这些都已完成。

有没有办法规避这个?请注意,我不想最终测试组件(在这种情况下是TaxHeader类)。我想要的是测试wicket的渲染。

1 个答案:

答案 0 :(得分:0)

这不是你问题的答案,但无论如何都可能有所帮助......

正如您自己发现的那样,代码不是很容易测试。为了使它更易于测试,你必须摆脱方法中的紧耦合。将setPageHeader方法更改为此类

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

会改进这一点,但它会属于你的TaxHeader类的域,应该移到那里,导致令人惊讶的(因此可读性很差)代码流。

另一方面......问问自己是否真的需要测试这种方法。当然100%的代码覆盖率看起来很棒,但很少值得付出努力,甚至在任何方面都没有什么意义。这种方法做了两件事。

  • 它调用了wicket的add方法,其功能可以被视为理所当然(并且测试它将是wicket开发人员的工作)。编译器会检查用法,并且可以通过page-rendering-test
  • 检查结果
  • 它调用一个构造函数,可以而且应该进行测试,但不能在页面测试的上下文中进行测试。它值得对它自己进行测试,可以通过使用WicketTester的startComponentInPage方法轻松完成。