2017-01-06 3 views
0

Hier ist mein Controller:Probleme mit spöttischen restTemplate

@RequestMapping(
     value = "/{owner}/{repositoryName}", 
     method = RequestMethod.GET, 
     produces = "application/json" 
) 
public RepoInfo repoInfo(@PathVariable String owner, @PathVariable String repositoryName) { 
    return restTemplate.getForObject(githubApiUrl + owner + "/" + repositoryName, RepoInfo.class); 
} 

Und hier sind Tests Methoden:

@Before 
public void mockGithubApiResponse() { 
    Mockito.when(restTemplate.getForObject(githubApiUrl + dummyOwner + "/" + dummyRepoName, RepoInfo.class)).thenReturn(dummyRepoInfoObject); 
} 

    @Test 
public void shouldReturnRepoInfoObject() throws Exception { 

    Gson gson = new Gson(); 
    String jsonRepo = gson.toJson(dummyRepoInfoObject); 

    this.mockMvc.perform(get("http://localhost:" + this.port + "/" + repoControllerMappingPrefix + dummyOwner + "/" + dummyRepoName) 
      .accept(MediaType.APPLICATION_JSON)) 
      .andExpect(status().isOk()) 
      .andExpect(content().json(jsonRepo)); 
} 

Aber es scheint nichts zu spotten. Der Controller reagiert immer noch auf externen Service.

Antwort

2

Ich denke, Ihre RestTemplate Erklärung wie unter

@Mock 
RestTemplate restTemplate; 

Die Ursache ist @Mock in dieser Klasse eine Mock-Instanz erstellt. Erstellt nicht in Ihrer tatsächlichen Controller-Klasse.

In diesem Fall können Sie die MockRestServiceServer-Klasse zum Spotten der RestTemplate-Klasse verwenden.

Das Folgende ist die Erklärung von MockResrServiceServer

@Autowired 
MockRestServiceServer mockServer; 

Hier finden Sie Initialise von mockServer

mockServer = MockRestServiceServer.createServer(restTemplate); 
} 

Und dies Erwartungen und Mock Antwort einrichten.

mockServer.expect(requestTo("http://exleft-URL.com")) 
      .andExpect(method(HttpMethod.GET)) 
      .andRespond(withSuccess("resultSuccess")); 

Das obige ist nur ein Beispiel, das Sie für Ihren Testcode arrangieren müssen.

Verwandte Themen