首先,我想说我正在处理遗留代码,无论我想要多少,我都无法改变它。
顺便说一下,我要做的就是验证是否调用了super.method()。这是我试图用Mockito / Junit测试的具体内容:
class foo extends JApplet(){
public void destroy(){
super.destroy();
}
}
通常情况下,如果不是一个被称为超级方法的测试用例,这样的东西就足够了:
verify(foo).destroy();
我已经看过几次问这个问题,通常回答是“继承是坏的,改变你的代码”,遗憾的是我完全不能做。是否有人知道我可以做的任何框架或小小技巧来测试这个?
提前致谢 - 我知道这是一个棘手的问题!
答案 0 :(得分:5)
您可以重构代码以在其他方法中调用super方法,例如:
class foo extends JApplet(){
public void destroy(){
callSuperDestroy();
}
public void callSuperDestroy(){
super.destroy();
}}
然后验证:
verify(foo).callSuperDestroy();
答案 1 :(得分:2)
似乎JMockit可能会这样做。看看这篇文章:
答案 2 :(得分:1)
我没试过这个,但是不可能创建一个自定义的ClassLoader,它只覆盖JApplet类的加载吗?然后你可以创建自己的JApplet,它记住是否调用了destroy()。
答案 3 :(得分:1)
您实际需要测试的是调用超级方法的效果仍然成立。实现这一目标的最简单方法是通过调用超级方法,这只是一个设计细节。
考虑到这一点: