0

我们有具有动态请求映射的控制器:

(@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();
......
}

4

0 回答 0