验证 super.method() 是使用 Mockito 调用的

2022-09-03 02:31:28

首先,我想说的是,我正在使用遗留代码,无论我多么想改变它,我都无法改变它。

有了这个方法,我试图做的是验证是否调用了super.method()。这就是我试图用Mockito/Junit测试的:

class foo extends JApplet(){

       public void destroy(){
          super.destroy();
 }
}

通常,如果它不是调用的超级方法,那么在测试用例中,这样的东西就足够了:

verify(foo).destroy();

我见过这个问题问过几次,通常的回答是“继承很糟糕,改变你的代码”,不幸的是,我根本做不到。有没有人知道我可以做的任何框架或小技巧来测试它?

提前致谢 - 我知道这是一个棘手的问题!


答案 1

您可以重构代码以在其他一些方法中调用超级方法,例如:

      class foo extends JApplet(){

       public void destroy(){
          callSuperDestroy();
       }
       public void callSuperDestroy(){
           super.destroy();
       }}

然后验证:

verify(foo).callSuperDestroy();

答案 2

您实际需要测试的是,调用超级方法的效果仍然适用。实现这一目标的最简单方法是通过调用超级方法,这仅仅是一个设计细节。

考虑到这一点:

  1. 为超级方法编写测试。
  2. 为子方法编写一个测试,并从此测试中调用同一类上的超方法的测试(通过直接调用或通过子类化测试)。