我们有具有动态请求映射的控制器:
(@RequestMapping(method = RequestMethod.POST, value = "${api.emailverification.officialvalidate.POST.uri}")
这些请求映射是通过 spring 环境中的属性文件解析的。
现在,在我们的 SpringJUnit4ClassRunner 测试类的 setup 方法中,我们尝试 mockmvc:
MockMvcBuilders.standaloneSetup(controllerUnderTest).build()
但是 MockMvcBuilder 无法解析value = "${api.emailverification.officialvalidate.POST.uri}"
,尽管 Spring 环境中存在 Properties 文件。下面是实际代码:
控制器方法:
@RequestMapping(method = RequestMethod.POST, value = "${api.emailverification.officialvalidate.POST.uri}"
,consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseBean> captureDataAndValidateOfficialEmailLink(HttpServletRequest request,@Valid @RequestBody CaptureDataRequest reqBean,BindingResult result,@RequestHeader HttpHeaders headers)
{
.....}
Junit类:
@SuppressWarnings("deprecation")
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
public class SendVerificationMailControllerTest
{
@Autowired
ApplicationContext context;
@Before
public void setUp() throws Exception
{.....
((ConfigurableEnvironment)context.getEnvironment()).getPropertySources().addFirst(new MockPropertySource("centralconfig",prop));
this.mockMvc = MockMvcBuilders.standaloneSetup(sendVerificationMailController).setControllerAdvice(exceptioHandler).build();
......
}