2017-03-15 1 views
0
@RunWith(SpringJUnitRunner.class)  
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOMPORT) 
class ResourceTest { 
    @Autowired 
    private TestRestTemplate testRestTemplate; 

    @MockBean 
    private AuthService authService; //This is used in the method being hit by the testRestTemplate. 

    @Before 
    public void setUp() extends Exception { 
     given(this.authService.auth(user)).willReturn(user); //given mock object some behaviour 
     //Some Code 
     MockitoAnnotations.initMocks(this); 
    } 

    @Test 
    public void testAuthValidParameters() throws Exception { 
     //Assume Every Parameter is appropriate 
     HttpEntity<String> request = new HttpEntity<>(postBody,headers); 
     //The Exception occurs here 
     ResponseEntity<String> responseEntity = this.testRestTemplate.postForEntity("/path/auth/",request,String.class); 
     //Some asserts and other tests 
    } 
} 

die Ausnahme verspottet wurde, wird wie folgtTestRestTemplate nicht die resouce erfassen, die in einem SpringBootTest

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:53234/path/auth/" 

Das Problem tritt nicht auf, wenn ich Mock und lassen Sie sich nicht die tatsächlichen Methoden laufen oder ich benutze Mock direkt (es scheint so, als würde Normal Mock in Kombination mit PowerMock die aufgerufene Methode nicht beeinflussen). Sie werden ausgeführt und dies wird Test integriert, der das Problem nicht löst.

Also, wenn ich MockBean verwende, tritt diese Ausnahme auf. Was könnte die Ursache sein und wie könnte ich es lösen?


Edit 1:

fast denselben Code verwenden und die Mock Anstoßen in setUp Wechsel wie

when(authService.authenticate(any(User.class))).thenReturn(user); 

Ich erhalte einen Http-Code 400. Heißt das, es den Server trifft? Das könnte bedeuten, dass es den MockBean aufnimmt, aber die Parameter, die überhaupt nicht geändert wurden, werden zurückgewiesen.

Antwort

0

Sie können etwas wie unten schreiben, damit Ihr Testdienst eine Antwort zurückgibt.

Sie können dann das testRestTemplate aufrufen und Ihr Objekt veröffentlichen und diese Antwort als Gegenleistung erwarten.

definieren Restassured Hafen:

@Value("${local.server.port}") 
private int tomcatPort; 

@Before 
public void setup() { 
    RestAssured.port = tomcatPort; 
} 
+0

ich bereits schrieb, als (authService.authenticate (any (User.class))) thenReturn (Benutzer);. wie ich in der Bearbeitung sagte 1. Aber es schien fruchtlos. Der Benutzer, für den Sie die Instanziierung und die Angabe von Werten vorgeschlagen haben, wird in der Auth-Klasse ausgeführt. Selbst wenn ich nicht richtig instanziiere, habe ich Matcher.any (User.class) verwendet, was bedeutet, dass es funktionieren sollte. Das Problem ist irgendwo in der Beschreibung von Mocks/inject Mocks/Autowiring Test Rest Vorlage im Springboot. –

+0

Kannst du den wiederhergestellten Port definieren und dann den gleichen Code ausprobieren. Ich habe meine Antwort editiert, um diese einzuschließen. Ich habe etwas ähnliches versucht und es funktioniert mit testresttemplate – Trin

Verwandte Themen