我寫了一個控制器單元spting啓動@WebMvcTest
配置HandlerMethodArgumentResolver。如何在春天開機測試
使用@WebMvcTest
,我將能夠注入MockMvc
對象,如下給出: -
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@WebMvcTest
class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void my_controller_test() throws Exception {
mockMvc.perform(post("/create-user"))
.andExpect(status().isCreated());
}
}
在控制器我注入使用彈簧HandlerMethodArgumentResolver
一個Principal
參數。請告訴我,我怎麼能寫一個單元測試與MockMvc
,讓我可以注入模擬Principal
對象在控制器方法的參數。
的sction Auto-configured Spring MVC tests解釋說,與@WebMvcTest
標註的測試將掃描的HandlerMethodArgumentResolver
豆。所以我創建了一個擴展了HandlerMethodArgumentResolver
的bean,並返回如下的模擬Principal
對象。
@Component
public class MockPrincipalArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(Principal.class);
}
@Override
public Object resolveArgument(MethodParameter parameter...) throws Exception {
return new MockPrincipal();
}
}
但仍然參數MockPrincipal
沒有傳遞給控制器方法。
春季啓動版本: - 1.4.5.RELEASE
您需要在請求中指定主體,而不是創建額外的'HandlerMethodArgumentResolver'。 'post(/ your-url).principal(new MockPrincipal())'。 –
非常感謝。我浪費時間不必要看其他選項:)。如果您不介意,請提一下,它在哪裏記錄? – Manu