如何对自定义 Wicket 组件进行单元测试

Posted

技术标签:

【中文标题】如何对自定义 Wicket 组件进行单元测试【英文标题】:How to unit test a custom Wicket component 【发布时间】:2011-10-02 20:27:37 【问题描述】:

鉴于这个非常简单的 Wicket 组件:

public class ProductImage extends WebComponent 

    public ProductImage(String id, Product p) 
        super(id, new Model(p));
        add(new AttributeModifier("src", true, new Model(p.getImage())));
    

如何使用 WicketTester 对其进行单元测试?我需要一个页面吗?

【问题讨论】:

【参考方案1】:

在 Wicket 1.5 中,#startComponentInPage(Component) 将为您创建一个页面,以便您可以测试任何类型的组件。

【讨论】:

那太好了...太糟糕了,我被 1.4 卡住了一段时间!不过还是谢谢啦!【参考方案2】:

我实际上并没有这样做(我只有tested panels),但startComponent() 似乎是这样做的方法。

类似这样的:

Product product = new Product(/* initialize product here */);
ProductImage pi = new ProductImage("image", product);
tester.startComponent(pi);
tester.assertContains(Pattern.quote(product.getImage()));

【讨论】:

嗯,快到了!真的startComponent 似乎是这样,但我无法测试“src”属性是否正确。 @Eduardo 不明确,但您可以像这样测试:tester.assertContains("src\\s*=\\s*\"" + Pattern.quote(product.getImage()) + "\""); 这就是我的想法,但是您的第一个示例失败了:( 挖掘 Wicket 的源代码,我发现 assertContains 在 tester.getServletResponse().getDocument() 上有效,并且在 startComponent 之后为空! @Eduardo 那么我想你毕竟需要一个面板。 :( 这么简单的事情有很多麻烦

以上是关于如何对自定义 Wicket 组件进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

WPF - 对自定义标记扩展进行单元测试

如何对自定义 Jackson JsonSerializer 进行单元测试?

Angular2如何对自定义验证器指令进行单元测试?

对自定义 symfony 约束进行单元测试

如何测试自定义单元格是不是已向 tableView 注册?

如何对第一个Vue.js组件进行单元测试 (上)