【问题标题】:Testing an abstract page class in wicket在检票口中测试抽象页面类
【发布时间】:2014-07-06 05:06:28
【问题描述】:

我从 Wicket 开始,正在做 TDD(当然使用 WicketTester)。
我在尝试使用标记继承创建通用布局时遇到了一个问题。
我查看了在线示例,包括this one。但是,这些示例并未提及如何测试父类。

问题是父类是抽象的。这意味着WicketTester 无法实例化该页面并且它会引发异常(这是理所当然的)。
我曾考虑使用模拟或假类将该类作为常规 POJO 进行测试,但随后我将失去测试该抽象父级中的检票口组件的能力。
我考虑的另一个解决方案(直到我看到 API ...)是提供一个自定义的IPageProvider,它将实例化一个假类/模拟而不是抛出异常。但是,API 似乎不应该只针对一个单元测试来实现。

与此同时,我将父类创建为具体类,并像任何其他页面类一样使用WicketTester 对其进行测试。但是,这些示例专门使用父页面的抽象类演示了标记继承,而且从设计角度来看,这似乎是正确的做法。

有什么建议吗?

【问题讨论】:

    标签: java unit-testing tdd wicket


    【解决方案1】:

    您可以在测试期间创建一个匿名子类实例。

    WicketTester w = new WicketTester();
    w.startPage( new AbstractPage() {} );
    

    你当然应该实现所有必要的抽象方法。此外,AbstractPage 应该有自己的 html(良好做法)。

    【讨论】:

    • 我什至不知道可以使用页面实例而不是类对象调用startPage,我一定错过了这一点。谢谢!
    【解决方案2】:

    您应该能够只创建抽象父类的测试子类并使用WicketTester 进行测试。

    我在类似的情况下做过,验证抽象父类的组件的呈现和交互没有问题。

    【讨论】:

    • 你是怎么做到的?为了测试页面,您需要将类对象提供给WicketTester,这又会引发异常。你的意思是你有一个实际的子类(而不是一个匿名的内部类)?也许如果我将它声明为测试的内部类......这可能会起作用......
    • 是的,我已将其作为内部类完成,或者如果多个测试需要它,则将其作为测试层次结构中的顶级类。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多