我有一个像这样的检票口:
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的渲染。
答案 0 :(得分:0)
这不是你问题的答案,但无论如何都可能有所帮助......
正如您自己发现的那样,代码不是很容易测试。为了使它更易于测试,你必须摆脱方法中的紧耦合。将setPageHeader
方法更改为此类
protected void setPageHeader(Component parent) {
parent.add(new TaxHeader("pageHeader")); //TaxHeader extends Panel
}
会改进这一点,但它会属于你的TaxHeader
类的域,应该移到那里,导致令人惊讶的(因此可读性很差)代码流。
另一方面......问问自己是否真的需要测试这种方法。当然100%的代码覆盖率看起来很棒,但很少值得付出努力,甚至在任何方面都没有什么意义。这种方法做了两件事。
add
方法,其功能可以被视为理所当然(并且测试它将是wicket开发人员的工作)。编译器会检查用法,并且可以通过page-rendering-test