如何解决PowerMock 模拟静态无法模拟类
我有一个使用 power mock 运行的测试用例。下面是代码
ParamControllerTest.java
@RunWith(powermockrunner.class)
@PrepareForTest(XYZ.class)
public class ParamControllerTest{
private HttpServletRequest request;
private ParamController paramController;
private ParamVO2 paramVO2;
private String userId = "123456";
private String access = "re";
@Mock
private XYZdaoMock xYZdaoMock;
@Test
public void testAddSecty(){
request = powermockito.mock(HttpServletRequest.class);
// You do get request value as HttpServletRequest
powermockito.mockStatic(XYZ.class);
when(XYZ.getId(request)).thenReturn(id);
when(XYZ.getAccess(userId,"bcd")).thenReturn("re");
when(XYZ.getId(request)).thenReturn("123456");
when(xYZdaoMock.updateKey(paramVO2)).thenReturn(paramVO2);
paramController.addParam(paramVO2);
verify(xYZdaoMock).updateKey(paramVO2);
}
}
ParamController.java
@Controller
@RequestMapping(value="/param")
@Transactional(propagation=Propagation.required,rollbackFor = Exception.class)
public class ParamController {
@RequestMapping(value="/abc",method = RequestMethod.POST)
public @ResponseBody ParamVO addParam(@RequestBody ParamVO paramVO){
ParamVO paramVO = null;
String userId = XYZ.getId(request);
// userId result null as request is null and due to which after this it result in NullPointerException
// Code
return paramVO;
}
}
考虑到控制器中 userId 上的空指针,powermockito.mockStatic(XYZ.class)
我认为这是错误的。我读到了这个,显然这不适用于适当版本的 mockito 和 power mockito。我尝试注释掉 pom 中的 mockito 依赖项,使其不与 power mockito 的版本冲突,但它不起作用。以下是我尝试过的 power mockito 版本,但没有一个有效。使用的 Spring 版本是 4.3.19。
尝试的 Power Mockito 版本是 1.4.12,它在运行测试用例和 1.7.3 时给出了 XYZ.class 的初始化错误,结果是 NullPointerException,如上所示。
pom.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency> -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule</artifactId>
<version>1.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-xstream</artifactId>
<version>1.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-legacy</artifactId>
<version>1.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-easymock</artifactId>
<version>1.7.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0.GA</version>
</dependency> -->
错误跟踪
java.lang.NullPointerException
at com.Value(ParamController.java:184)
at com..testAddSecty(ParamControllerTest.java:218)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:68)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:326)
任何有关如何解决此问题的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。