bypass静态方法

ocebsuys  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(355)

我正在使用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;
    }
}

=>下面是我当前的测试类和测试方法如何查找 MyClassToTest.methodToTest ```
class MyTestClass{
public void test_methodToTest(){
JsonObject dummy_jsonObject = new JsonObject().put("foo","foo");
doReturn(dummy_jsonObject).when(MyUtilClass.staticMethod(any()));
}
}

ubby3x7f

ubby3x7f1#

如果你想嘲笑你的 staticMethodMyUtilClass 对于mockito(需要3.4.0或更高版本),存根如下所示(我假设您使用的是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这个特性的更多信息和示例。

相关问题