如何在java中模拟单个方法

2022-09-01 04:15:27

是否可以模拟 Java 类的单个方法?

例如:

class A {
    long method1();
    String method2();
    int method3();
}


// in some other class
class B {
    void someMethod(A a) {
       // how would I mock A.method1(...) such that a.method1() returns a value of my
       // choosing;
       // whilst leaving a.method2() and a.method3() untouched.
    }
}

答案 1

使用间谍机制:Mockito's

A a = new A();
A aSpy = Mockito.spy(a);
Mockito.when(aSpy.method1()).thenReturn(5l);

使用 spy 会调用未存根的任何方法的包装对象的默认行为。

Mockito.spy()/@Spy


答案 2

使用 Mockito 中的 spy() 方法,并像这样模拟你的方法:

import static org.mockito.Mockito.*;

...

A a = spy(new A());
when(a.method1()).thenReturn(10L);

推荐