微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PowerMock 模拟静态无法模拟类

如何解决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 举报,一经查实,本站将立刻删除。