无法解析 Mockito 单元测试中的占位符



我尝试为其编写单元测试用例的控制器如下 -

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

当然,您可以实现与控制器相同的自动布线。

相关内容

  • 没有找到相关文章

最新更新