Ich schreibe Integrationstestfälle mit MockMvc, um meine REST API zu testen.Mock ein nicht federgeführtes Objekt beim Integrationstest mit mockMVC
Innerhalb meiner Implementierung der RESTAPI verwende ich intern RestTemplate (nicht direkt vom Controller, sondern innerhalb einer util-Klasse, die der Controller aufruft), um eine REST-API eines Drittanbieters aufzurufen. Die RestTemplate, die ich verwende (um die 3rd Party Rest API zu machen), ist keine Spring Bean, sondern ich instanziiere sie als RestTemplate restTemplate = new RestTemplate();
Ich möchte den restTemplate Aufruf (PostForEntity) verspotten.
Ich versuche, die unten Ansatz:
Mein Test Klassen-
@ContextConfiguration(locations = {
"classpath:test-applicationContext.xml"
})
@WebAppConfiguration
public class MockMVCTest {
private MockMvc mockMvc;
private RestTemplate restTemplate
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void setUp() {
if (!initalized) {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
restTemplate = (RestTemplate)webApplicationContext.getBean("restTemplate");
}
@Test
public void demo() throws Exception {
when(
restTemplate.postForEntity(
eq("thirdpartyuri"),
any(HttpEntity.class),
eq(MyClass.class))).thenReturn(myresponse);
mockMvc.perform(
post("uriExposedbyme")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.content(MY_PAYLOAD)).andExpect(status().isOk());
}
In meiner Anwendung-Kontext Ich habe die Fo llowing Mock definiert:
<bean id="restTemplate" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="org.springframework.web.client.RestTemplate" /> </bean>
Aber wenn ich meine Testfall ausführen die RestTemplate verspottet zu werden, aber wenn ein Aufruf RestTemplate während der Ausführung geschieht die eigentliche resttemplate wird statt meiner mock resttemplate genannt.
Bitte schlagen Sie vor, wie ich RestTemplate für meinen Testfall überspielen kann.
Können Sie Ihre Test-applicationContext.xml –
Hallo Tharsan teilen, das ist mein Test-applicationContext.xml \t: Komponente-Scan-Basis-Paket = "mybasepackage "/> \t \t \t \t \t \t –
Ashwini