我正在编写单元测试用例的控制器如下所示-
@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)的情况下为这个占位符赋值?
发布于 2017-05-16 06:49:19
这里的关键是自己填写占位符,调用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());
}}
当然,您可以实现同样的自动控制。
https://stackoverflow.com/questions/43992597
复制相似问题