Testing 逐部分测试wicket页
我有一个像这样的小门课:Testing 逐部分测试wicket页,testing,wicket,Testing,Wicket,我有一个像这样的小门课: 公共类MyReport扩展了AbstractReport{ 私有静态最终长serialVersionUID=1L; 公共MyReport(PageParameters)引发ParseException异常{ 超级(参数); 试一试{ }捕获(解析异常){ 抛出新的RuntimeException(“缺少起始日期/截止日期”); } } @凌驾 受保护的void onInitialize(){ super.onInitialize(); setPageHeader();
公共类MyReport扩展了AbstractReport{
私有静态最终长serialVersionUID=1L;
公共MyReport(PageParameters)引发ParseException异常{
超级(参数);
试一试{
}捕获(解析异常){
抛出新的RuntimeException(“缺少起始日期/截止日期”);
}
}
@凌驾
受保护的void onInitialize(){
super.onInitialize();
setPageHeader();
}
受保护的void setPageHeader(){
添加(新TaxHeader(“pageHeader”);//TaxHeader扩展面板
}
受保护的void setPageFooter(CustomerTo CustomerInfo-Footer){
//待补充
}
}
HTML标记如下所示
protected void setPageHeader(Component parent) {
parent.add(new TaxHeader("pageHeader")); //TaxHeader extends Panel
}
标题
标题
页脚
测试类是这样的
protected void setPageHeader(Component parent) {
parent.add(new TaxHeader("pageHeader")); //TaxHeader extends Panel
}
公共类ReportTest扩展了WicketTestBase{
@试验
公共作废报告应正确呈现(){
tester.startPage(MyReport.class,新页面parameters());
AssertRenderPage(MyReport.class);
}
}
我想做的是测试驱动,构建页面并测试它。我的意思是我想分别测试方法setPageHeader()
和setPageFooter()
。差不多
@测试
公共无效页面标题应正确()
但是,这是不可能的,因为wicket不会加载页面,并且会抱怨没有使用组件设置“pageFooter”wicket标记。
可以想象,对于一个包含大量wicket引用的复杂HTML页面,这意味着在运行上述测试之前,所有这些都已完成
有没有办法避免这种情况?注意,我不想以测试组件(即本例中的
TaxHeader
类)结束。我想要的是测试wicket的渲染。这并不是对您问题的确切回答,但可能会有所帮助
正如您自己发现的那样,代码本身并不是非常可测试的。为了使它更易于测试,您必须消除方法中的紧密耦合。将setPageHeader
方法更改为类似以下内容
protected void setPageHeader(Component parent) {
parent.add(new TaxHeader("pageHeader")); //TaxHeader extends Panel
}
这将改善这一点,但它将属于您的TaxHeader
类的域,并且应该移动到那里,从而产生令人惊讶的(因此可读性差)代码流
另一方面。。。问问自己,你是否真的必须测试这个方法。当然,100%的代码覆盖率看起来不错,但很少值得付出努力,甚至在任何方面都没有意义。这种方法有两个作用
- 它调用wicket的
-方法,该方法的功能可以被认为是理所当然的(测试它将是wicket开发人员的工作)。使用情况由编译器检查,结果可由页面呈现测试检查add
- 它调用一个构造函数,该构造函数可以也应该进行测试,但不能在页面测试的上下文中进行测试。它值得自己进行一次测试,这可以通过使用WicketTester的StartComponentPage方法轻松完成