我写了一个控制器单元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