强制测试抽象类的扩展

时间:2015-05-29 14:28:42

标签: java testing junit

我有一个具有良好测试覆盖率的抽象类。我想确保该类的任何扩展也通过抽象类的测试。有没有办法通过使用JUnit的代码来确保这一点?

3 个答案:

答案 0 :(得分:1)

在您的抽象类的测试中检查您子类中未更改的所有方法。 未更改的方法不需要在扩展类的范围内再次进行测试。

如果某种方法被覆盖,那么对它们应用相同的测试将是一个多变的错误决定,因为它们可能具有不同的业务逻辑。因此,如果某人继承了你的课程,他应该为他所覆盖的方法编写自己的测试。

这是改变或添加逻辑业务逻辑的所有继承点。

答案 1 :(得分:1)

所以我想到了一些解决方法,我不知道你是否愿意,但试试吧。

我的解决方案是进行测试,找到Abstract类的所有实现 实例化所有音乐会类然后它将对所有音乐会类运行相同的测试。

您需要以下API才能通过反射获取所有子类

 <dependency>
         <groupId>org.reflections</groupId>
         <artifactId>reflections</artifactId>
         <version>0.9.9-RC1</version>
 </dependency>

然后像这样使用它

Reflections reflections = new Reflections("packageName");
Set<Class<? extends YourClass>> classes = reflections.getSubTypesOf(YourClass.class);

然后实例化并运行

要使用不同的实现运行每个测试,您需要@RunWith(Parameterized.class)

这是关于如何在Junit中进行参数化测试的链接

Easy way of running the same junit test over and over?

答案 2 :(得分:0)

我认为没有一种简单的方法可以自动完成。

关于尝试获取给定类的所有子类,请参阅this question以获取有关原因的更多详细信息。

相关问题