2017-08-23 9 views
0

Ich möchte den Resttemplate Aufruf verspotten, die instansiated als lokale Variable und Austauschmethode aufgerufen wird. Ich verspottete die Verwendung der Erwartung, aber es ruft die tatsächliche Methode auf. Fehle ich etwas? Bitte helfen Sie mir dabei. Vielen Dank im VorausMocking lokales Objekt funktioniert nicht - jmockit

public class ServiceController { 
    public String callGetMethod (HttpServletRequest request){ 
     String url = request.getParameter("URL_TO_CALL"); 
     HttpHeaders headers = new HttpHeaders(); 
     headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); 
     HttpEntity<String> entity = new HttpEntity<String>(headers); 
     RestTemplate restTemplate = new RestTemplate(); 
     ResponseEntity<String> res = restTemplate.exchange(url, HttpMethod.GET, entity, String.class); 
     return res.getBody(); 
    } 
} 

@RunWith(JMockit.class) 
public class ServiceControllerTest { 
    @Tested 
    private ServiceController controller; 
    @Test 
    public void callGetMethod (@Mocked HttpServletRequest request, @Mocked RestTemplate restTemplate){ 
     new NonStrictExpectations() { 
     { 
      restTemplate.exchange(host,HttpMethod.GET, entity,String.class); returns (new ResponseEntity<String>("success" , HttpStatus.OK)); 
     } 

     ResponseEntity<String> response = controller.callGetMethod(httpServletRequest); 

    } 
} 
+0

Versuchen Sie explizit @Mock RestTemplate nach dem Definieren der Klasse. Versuchen Sie auch, Controller ocntroller = new Controller() zu instanziieren; Denken Sie darüber nach, dass sich der Name in diesen Klassencontroller ändert. – alxbxbx

+0

Ich gab nur einen allgemeinen Namen für Controller und es ist kein tatsächlicher Name im Code verwendet. Außerdem ist es nicht mein Code, um die restTemplate-Objektplatzierung zu ändern. – Abdul

+0

Sie können die Antwort dieses Typen überprüfen https://stackoverflow.com/questions/42406625/how-to-mock-resttemplate-in-java-spring – alxbxbx

Antwort

0

Wir müssen die neue RestTemplate() verspotten. Damit wird mocked object restTemplate der lokalen Variablen der Methode zugewiesen.

@Mocked 
RestTemplate restTemplate; 

new NonStrictExpectations() { 
    { 
     new RestTemplate(); 
     result = restTemplate; 
     restTemplate.exchange(host, HttpMethod.GET, entity, String.class); 
     returns(new ResponseEntity<String>("success", HttpStatus.OK)); 
    } 
Verwandte Themen