如何使用调试器单步执行 Mockito 间谍对象?

How Can you Use a DebuggerTo Step through a Mockito Spy Object?

我希望能够在 Mockito Spy 对象上单步执行调试器,尤其是 Eclipse。例如,假设我要在下面测试 class:

public class someClass(){
    public someMethod(){
        System.out.println("Begin someMethod call");
        //some code in the method
        System.out.println("End someMethod call");
    }
}

假设我有一个 Mockito class,如下所示:

@RunWith(MockitoJUnitRunnerclass)
public class SomeMethodTest {

@Spy SomeClass someSpiedObject;

@Test
public final void testSomeMethod(){
    //some code in the test method
    someSpiedObject.someMethod();
    /some tests
}

我 运行 遇到的问题是,如果我在 //测试方法中的一些代码处设置调试断点 and at //方法中的一些代码,会到达第一个断点,但不会到达第二个断点。我知道代码是 运行 但是当系统输出打印到控制台时。我知道,作为一个间谍对象,它不是相同的代码,调试器不应该工作。我还知道,如果它是 Mock 对象而不是 Spy,则可以使用 VerboseLogging()。我真正的问题是,如何像对待普通对象一样单步执行代码?是否有调试框架可以提供帮助?有没有我不知道的 Mockito 功能?我最终将不再需要它成为一个 Spy 对象并且可以简单地测试它,但直到静态调用被重构。

我 运行 在 IntelliJ 上遇到了同样的问题。我只模拟了被测服务中的一种方法。

我找到的唯一解决方案是在我的测试代码中放置一个断点,然后进入 (F7) 真正的方法来调试实际代码。这很糟糕,但这是迄今为止我发现的唯一方法。