我有一个接口,它有几个实现。我正在为这个接口设置一个测试套件。现在我想为每个具体的实现者运行套件中的所有测试类。
澄清一下,我有一个类似
的设置- TestSpam.java
- TestEgg.java
- TestBacon.java
,它们都在测试我的界面IBreakfast的不同方面,我将把它们组织在一个名为TestBreakfast的套件中。我希望所有不同的测试都以某种方式为特定的实现运行,最好是一次,并且在套件上。
在测试用例级别,我认为我可以使用参数化来运行所有的实现,但看起来不像扩展到套件。而且当使用参数化时,看起来我必须硬编码实现,这感觉很糟糕。
你知道怎么做吗?
在这种情况下,我反复采用如下模式:
- 创建一个抽象类来测试接口的预期功能。
- 这个类应该声明一个抽象工厂方法来返回接口的一个实例。
- 所有测试都应该使用工厂方法返回的实例。
- 创建一个或多个类(每个实现一个)来扩展这个抽象类。
- 通过返回适当的具体类实现工厂方法。
- 使用这个具体的测试类来测试特定于实现的功能。