如何使用调试器单步调试 Mockito Spy 对象?

问题描述 投票:0回答:2

我希望能够在 Mockito Spy 对象上单步调试调试器,特别是 Eclipse。举个例子,假设我有下面要测试的课程:

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

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

@RunWith(MockitoJUnitRunnerclass)
public class SomeMethodTest {

@Spy SomeClass someSpiedObject;

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

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

eclipse debugging mockito spy
2个回答
0
投票

我在 IntelliJ 上遇到了同样的问题。我只嘲笑我的测试服务中的一种方法。

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


0
投票

奇怪的行为,但这对我有用:

  1. 清除所有间谍断点。
  2. 在调用间谍方法之前在测试中设置断点。
  3. 启动 JUnit 调试器。
  4. 现在在间谍代码中设置断点,同时调试器正在运行并位于测试代码中的断点处。
  5. 继续执行,您的间谍断点现在应该可以被识别。 很奇怪,但无论如何。现在(对我来说)有效。祝你好运!
© www.soinside.com 2019 - 2024. All rights reserved.