【问题标题】:apply test suite to implementations of a interface将测试套件应用于接口的实现
【发布时间】:2011-11-17 04:49:17
【问题描述】:

我有一个存在多个实现的接口。 我正在为界面设置一个测试套件。现在我想为每个具体实现者运行套件中的所有测试类。

澄清一下,我有一个类似的设置

  • TestSpam.java
  • TestEgg.java
  • TestBacon.java

它们都在测试我的界面 IBreakfast 的不同方面,我将把它们组织在一个名为 TestBreakfast 的套件中。而且我希望所有不同的测试都针对以某种方式指定的特定实现运行,最好是一次并在套件上运行。

在测试用例级别,我认为我可以使用参数化来运行所有实现,但看起来并没有扩展到套件。而且当使用参数化时,看起来我必须对实现进行硬编码,这感觉非常落后。

你知道如何进行这项工作吗?

【问题讨论】:

    标签: java interface junit


    【解决方案1】:

    在这种情况下,我反复采用如下模式:

    • 创建一个抽象类来测试接口的预期功能。
      • 这个类应该声明一个返回接口实例的抽象工厂方法。
      • 您的所有测试都应使用工厂方法返回的实例。
    • 创建一个或多个扩展此抽象类的类(每个实现一个)。
      • 通过返回适当的具体类来实现工厂方法。
      • 使用这个具体的测试类也可以测试特定于实现的功能。

    【讨论】:

    • 谢谢,但是您将如何将其扩展到测试套件?我真的很想避免子类化所有测试类。
    • 澄清一下:您正在尝试以编程方式创建一个父 TestSuite,其中包含每个接口实现的 TestSuite 实例。您是想完全通过反射找到实现,还是想为TestSuite 的构造函数提供类名/类实例列表?
    • 对不起,如果我不清楚,更新了原始问题并进行了澄清。所以不,这不是我真正想要的。是否反射并不重要,但我认为传递一个实例会更容易
    • @keis:我很抱歉,但我脑子里有一篇关于这个的帖子,但我还没有时间把它说出来。今晚有空的时候我可能会试着把它弄进去。
    • 不用担心。感谢您的宝贵时间,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2015-11-23
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多