Mockito在模拟的Javalin上下文中调用真实方法

时间:2019-10-18 08:02:23

标签: java mocking mockito javalin

我的行为确实很奇怪。似乎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)

但是它不应该调用真正的代码!发生了什么事?

1 个答案:

答案 0 :(得分:1)

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