2016-08-01 6 views
0

I Controller-Methoden am Testen, das sind Anrufe mit:Wie getCurrentLoginId in Spring-Sicherheit zu verspotten?

SecurityUtils.getCurrentLoginId() 

Allerdings, wenn ich diesen Test laufen

SecurityContext securityContext = Mockito.mock(SecurityContext.class); 
    Mockito.when(SecurityUtils.getCurrentLoginId()).thenReturn((long) 1); 
    SecurityContextHolder.setContext(securityContext); 

    RequestBuilder requestBuilder = MockMvcRequestBuilders 
      .post(uri) 
      .with(user("admin").password("pass").roles("USER","ADMIN")) 
      .with(csrf()) 
      .param("blogId", "" + blogId) 
      .content(mapToJson(post)) 
      .contentType(MediaType.APPLICATION_JSON) 
      .accept(MediaType.APPLICATION_JSON); 

ich:

java.lang.IllegalStateException: User not found! 

Antwort

1

Sie versuchen, statische Methode zu verspotten und Mockito unterstützt diese Funktion nicht. Bitte verwenden Sie stattdessen PowerMock.

Sie finden einige Beispiele für spöttische statische Methoden über PowerMock here.

+0

Ich versuche powermock mit Mockito anzuwenden, aber wenn ich die PowerMockRunner.class hinzufüge - sieht es so aus, als ob ich den WebApplicationContext verlieren würde - was könnte falsch sein? – poseid

+0

Das Problem könnte die RunWith den SpringTestRunner Kontext verlieren – poseid

+1

Sie haben Recht - Spring Context aktivieren müssen Sie Tests mit Spring Junit Runner ausführen, und PowerMock erfordert eine eigene Runner aktiviert werden. Um dieses Problem zu lösen, stellt PowerMock @PowerMockRunnerDelegate zur Verfügung. [Hier] (https://github.com/jayway/powerermock/wiki/JUnit_Delegating_Runner#using-powerermock-with-junit-delegation-runner) findest du Erklärungen und einige Beispiele. – mxf

Verwandte Themen