我尝试为其编写单元测试用例的控制器如下 -
@RequestMapping("${rest.base.path}/plugin")
public class Controller {
.
.
.
}
单元测试用例已设置 -
@RunWith(MockitoJUnitRunner.class)
public class ControllerTest {
@Autowired
private MockMvc mvc;
@InjectMocks
Controller dataController;
@Mock
PluginService pluginService;
@Test
public void createFiles() throws Exception {
this.mvc = MockMvcBuilders.standaloneSetup(dataController).build();
mvc.perform(MockMvcRequestBuilders.get("/dc/plugin")
.contentType(MediaType.APPLICATION_JSON));
}
在运行单元测试时,它无法解析占位符 ${rest.base.path},因为我没有加载 Spring 上下文。我尝试设置System.setProperty("rest.base.path","/api"(没有任何成功。无论如何,我可以在不删除@RunWith(MockitoJUnitRunner.class(的情况下为该占位符分配值吗?
这里的关键是自己填写占位符,调用 StandaloneMockMvcBuilder.addPlaceholderValue
如文档所述:
在独立设置中,不支持请求映射中嵌入的占位符值。此方法允许手动提供占位符值,以便可以解析它们。
因此,以下简单代码段应该适合您
public class TestController {
private MockMvc mockMvc;
@Before
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(new Controller()).addPlaceHolderValue("rest.base.path", "dc")
.setControllerAdvice(new ExceptionMapper())
.setMessageConverters(new MappingJackson2HttpMessageConverter(new ExtendedObjectMapper())).build();
}
@Test
public void testGet() throws Exception {
mockMvc.perform(get("/dc/plugin").accept(MediaType.APPLICATION_JSON_VALUE)).andExpect(status().isOk());
}}
当然,您可以实现与控制器相同的自动布线。