title: How to use Mockito.verify() on static methods?
body: <p>I am working on Junit &amp; Mockito. In my project I have a SocialDataAccess Controller whose code goes like this:</p>
  
  <pre><code>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;
      }
  
  }
  </code></pre>
  
  <p>This is what I have done. I have made a request and my request successfully calls my controller. When I try to use <code>Mockito.verify()</code> to test whether my static method is called or not, I get an error as shown below.</p>
  
  <pre><code>@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());          
  
      }
  }
  </code></pre>
  
  <p>The error which I got:</p>
  
  <pre><code>org.mockito.exceptions.misusing.UnfinishedVerificationException: 
  Missing method call for verify(mock) here:
  -&gt; 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).
  </code></pre>
  
  <p>My questions are:</p>
  
  <ol>
  <li><p>Can I use <code>Mockito.verify()</code> on my method <code>removeOtherProviderAuthTokenFromSession(request,provider)</code>. If "yes" How? &amp; If "NO" why? <code>SocialUtility</code> is the name of class and the method is static. Request is the same request which comes to the controller. And provider is a string. I don't want to use PowerMockito.</p></li>
  <li><p>I also want to use verify on <code>getOAuthServiceProvider(appCode, provider)</code>.
  How can I do this?</p></li>
  </ol>
  
  <p>Any Help would be appreciable.</p>