小编Nor*_*t94的帖子

Mockito - 模拟子类方法调用

我正在处理遗留代码并尝试为我所做的实现编写单元测试。我有以下结构:

   AbstractClass:
    ----------------

    public AbstractClass {

    abstract method2();

     void method1(){   
      ...does something...
      ..calls --> method2()
     }
    }

    Subclass
    ------------
    public Subclass extends AbstractClass(){

     void method2(){
      ..do something....
      ..mockThisMethod()...

       return true;   
     }
 }
Run Code Online (Sandbox Code Playgroud)

我有一个抽象类,它在特定方法中实现了一些逻辑。此方法调用比子类中实现的另一个方法。子类中的方法调用了我想模拟的其他方法。

在不更改实现代码(难以更改)的情况下这可能吗?大多数结果都建议使用模拟间谍,但它不起作用。

我在这里遵循了 TestDesign 描述:

https://www.tildedave.com/2011/03/06/pattern-stubbing-legacy-superclasses-with-mockito-spies.html

我所做的是:

 Subclass subclass= spy(Subclass.class);
 when(subclass.mockThisMethod()).thenReturn(something);
 subclass.method1() (I am not sure if this line is correct?)
Run Code Online (Sandbox Code Playgroud)

所以我想避免的是,调用方法(mockThisMethod中)Subclass。由于此方法会执行一些 db-stuff 等等。我知道如果我使用对象组合而不是继承会更容易测试,但在这一点上,很难改变整个实现。上面的代码不起作用..我得到了一个 NPE。

java unit-testing mockito

4
推荐指数
1
解决办法
5040
查看次数

标签 统计

java ×1

mockito ×1

unit-testing ×1