绕过 Mockito 中的静态方法

Bypass static method in Mockito

我正在使用 Mockito 编写 JUnit 测试用例,并且试图绕过测试方法中的静态方法调用。我得到一个 NullPointerException 而 运行 测试用例。

是否有任何方法可以在不使用 PowerMockito 的情况下绕过上述调用,或者在下面提到的方法中需要进行哪些修复?

下面是有助于您理解问题的代码片段:

=> 这是我的代码,我想使用 Mockito 为其编写一个 JUnit 测试用例。

class MyClassToTest{
    public void methodToTest(){
        JsonObject obj = MyUtilClass.staticMethod(arg1);
    }
}

=>下面是MyUtilClass的定义:

class MyUtilClass{
    public static JsonObject staticMethod(JsonObject arg1){
        //use arg1 to populate return object 
        return jsonobject;
    }
}

=> 以下是我当前的测试 Class 和测试方法如何查找 MyClassToTest.methodToTest

的片段
  class MyTestClass{
    public void test_methodToTest(){
        JsonObject dummy_jsonObject = new JsonObject().put("foo","foo");
        doReturn(dummy_jsonObject).when(MyUtilClass.staticMethod(any()));
    }
 }

如果您想使用 Mockito(需要 3.4.0 或更高版本)从 MyUtilClass 模拟您的 staticMethod,存根如下所示(我假设您使用 Java 版本 > 9):

@Test
void shouldMockStatic() {
  JsonObject dummy_jsonObject = new JsonObject().put("foo","foo");
  try (MockedStatic<MyUtilsClass> mockedStatic = Mockito.mockStatic(MyUtilsClass.class)) {
    mockedStatic.when(() -> MyUtilsClass.staticMethod(anyString()).thenReturn(dummy_jsonObject);

    // now invoke your class under test
  }
}

您可以找到有关 Mockito 此功能的更多信息和示例 here