@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.
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. –
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