【问题标题】:Mockito calling real method on mocked Javalin contextMockito 在模拟的 Javalin 上下文中调用真实方法
【发布时间】:2019-10-18 08:02:23
【问题描述】:

我有一个非常奇怪的行为。似乎 Mockito 正在调用模拟类的真实方法,从而导致 NullPointerException。我正在模拟 Java 的 Javalin http 框架中存在的 Context 对象。

这是导致异常的最少代码。

import io.javalin.http.Context;
import org.mockito.Mockito;

public class Main {
    public static void main(String[] args) {
        Context ctx = Mockito.mock(Context.class);
        Mockito.when(ctx.queryParam("hello")).thenReturn("test");
    }
}

我明白了

    at io.javalin.http.Context.queryString(Context.kt:285)
    at io.javalin.http.Context.queryParamMap(Context.kt:282)
    at io.javalin.http.Context.queryParams(Context.kt:279)
    at io.javalin.http.Context.queryParam(Context.kt:266)
    at io.javalin.http.Context.queryParam$default(Context.kt:266)
    at io.javalin.http.Context.queryParam(Context.kt)
    at Main.main(Main.java:9)

但它不应该调用真正的代码!怎么回事?

【问题讨论】:

  • 如果这是您实际上工作的最小代码,那么很清楚为什么这不起作用。 Mockito 没有静态模拟,其他代码仍然可以调用 new Context(...) 来获取真正的 Javalin 对象。
  • 不确定您的意思汤姆,该代码不起作用,这是实际返回异常的最小示例。结果证明是我在下面描述的原因。

标签: java mocking mockito javalin


【解决方案1】:

您并没有真正正确地添加测试。不要在 main 方法中创建它们,而是创建一个测试类,然后使用 @Test 注释对您的测试进行注释(为此需要 JUnit)。然后您应该能够使用您的 IDE 运行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多