MockMvcを使用して統合テストケースを作成して、REST APIをテストしています。mockMVCを使用した統合テスト中にnon spring管理オブジェクトをモックする
RESTAPIの実装では、内部的にRestTemplate(コントローラから直接ではなく、コントローラが呼び出すutilクラス内から)を使用してサードパーティのREST APIを呼び出しています。私が使用しているRestTemplate(サードパーティの残りのAPIを作るため)は、スプリングマネージドBeanではなく、代わりに としてインスタンス化しています。RestTemplate restTemplate = new RestTemplate();
私はrestTemplate呼び出し(postForEntity)をモックしたいと思います。
私は、以下のアプローチをしようとしています:
私のテストクラス -
@ContextConfiguration(locations = {
"classpath:test-applicationContext.xml"
})
@WebAppConfiguration
パブリッククラス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());
}
私は、 llowingモックが定義:
<bean id="restTemplate" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="org.springframework.web.client.RestTemplate" /> </bean>
しかし、私は私のテストケースを実行したときにRestTemplateが嘲笑なっているが、RestTemplateへの呼び出しが実行中に発生したときに実際のresttemplateではなく、私のモックresttemplateで呼ばれています。
私はテストケースのためにRestTemplateを模擬する方法を提案してください。
あなたがテストapplicationContext.xmlを –
こんにちはTharsanを共有することができますが、これは私のテスト、applicationContext.xmlをあります"/> \t \t \t \t <コンストラクタ-argの値= "org.springframework.web.client.RestTemplateセッターを持っている"/> \t \t –
Ashwini