绕过 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。
我正在使用 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。