当前位置:  开发笔记 > 编程语言 > 正文

如何在静态方法上使用Mockito.verify()?

如何解决《如何在静态方法上使用Mockito.verify()?》经验,为你挑选了0个好方法。

我正在为Junit&Mockito工作.在我的项目中,我有一个SocialDataAccess控制器,其代码如下:

public class SocialDataAccessController implements Controller{

private SocialAuthServiceProvider socialAuthServiceProvider;

@Override
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        String provider = request.getParameter("pId");
        String appCode =  request.getParameter("apc");

         * check if data in session is of the same provider orof different
         * provider, if different then remove auth and request token
         **/

        SocialUtility.removeOtherProviderAuthTokenFromSession(request,provider);

        try {
            /** creating the OAuthService object based on provider type **/
            OAuthService service = getSocialAuthServiceProvider().getOAuthServiceProvider(appCode, provider);
            .....
            ........
            ............            
return new ModelAndView("redirect:callback.html?pId=" + provider);
    }

public SocialAuthServiceProvider getSocialAuthServiceProvider() {
        return socialAuthServiceProvider;
    }

}

这就是我所做的.我已经发出请求,我的请求成功调用了我的控制器.当我尝试用来Mockito.verify()测试我的静态方法是否被调用时,我得到一个错误,如下所示.

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(
        locations={
            "file:/opt/div/BatchWorkspace/harvest_branch/WebContent/WEB-INF/test-servlet.xml"
        }
)

public class TestSocialDataAccessController {   
    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();      
    }


    @SuppressWarnings("static-access")
    @Test
    public void testBasicSetUp() throws Exception{
        RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/social-connect.html")
                .param("apc","tj")
                .param("src","google")
                .param("pId","ggl")
                .param("cl","xxxxxxxxxxxxxx");

        mockMvc.perform(requestBuilder)
       .andDo(MockMvcResultHandlers.print())
       .andExpect(MockMvcResultMatchers.status().isMovedTemporarily())
       .andExpect(MockMvcResultMatchers.redirectedUrl("xxxxxxxx"));

           SocialUtility sutil = new SocialUtility();
           SocialUtility spy = Mockito.spy(sutil);
           MockHttpServletRequest request = requestBuilder.buildRequest(wac.getServletContext());
           Mockito.verify(spy).removeOtherProviderAuthTokenFromSession(request,Matchers.anyString());          

    }
}

我得到的错误:

org.mockito.exceptions.misusing.UnfinishedVerificationException: 
Missing method call for verify(mock) here:
-> at com.tj.harvest.testcase.TestSocialDataAccessController.testBasicSetUp(TestSocialDataAccessController.java:88)

Example of correct verification:
    verify(mock).doSomething()

Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
Mocking methods declared on non-public parent classes is not supported.

    at com.tj.harvest.testcase.TestSocialDataAccessController.testBasicSetUp(TestSocialDataAccessController.java:89)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597).

我的问题是:

    我可以用Mockito.verify()我的方法吗removeOtherProviderAuthTokenFromSession(request,provider)?如果"是"怎么样?&如果"不"为什么?SocialUtility是类的名称,方法是静态的.请求是与控制器相同的请求.而提供者是一个字符串.我不想使用PowerMockito.

    我也想使用验证getOAuthServiceProvider(appCode, provider).我怎样才能做到这一点?

任何帮助都会很明显.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有