我正在尝试编写单元测试用例的控制器如下 -
@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));
}
在运行单元测试时,由于我没有加载Spring Context,因此无法解析占位符 $ {rest.base.path} 。我尝试设置 System.setProperty(“rest.base.path”,“/ api”)但没有任何成功。无论如何我可以在不删除 @RunWith(MockitoJUnitRunner.class)的情况下为该占位符赋值:
答案 0 :(得分:4)
这里的关键是自己填写占位符来调用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());
}}
当然,您可以实现与控制器相同的自动装配。