我有一个具有良好测试覆盖率的抽象类。我想确保该类的任何扩展也通过抽象类的测试。有没有办法通过使用JUnit的代码来确保这一点?
答案 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中进行参数化测试的链接
答案 2 :(得分:0)
我认为没有一种简单的方法可以自动完成。
关于尝试获取给定类的所有子类,请参阅this question以获取有关原因的更多详细信息。