1

我正在使用 MockitoJUnit 库来测试我的控制器。有一些变量被声明为:

@Value("${mine.port}")
private Integer port;

当我运行测试时,它在资源文件夹中找不到值 mine.port 作为属性文件。我的控制器运行没有问题,但是当我运行控制器 junit 测试时端口号为空。

我在课堂上使用了以下注释:

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = myControl.class)
@WebAppConfiguration
@AutoConfigureMockMvc

我在junit测试中使用了以下方法

@Before
public void setup() {
    MockitoAnnotations.initMocks(this);

    mockMvc = MockMvcBuilders
            .standaloneSetup(myController)
            .build();
}
@Test
public void getName() throws Exception {
MockHttpServletRequestBuilder request = 
MockMvcRequestBuilders.get("/service")
            .contentType(MediaType.APPLICATION_JSON_VALUE);
    MvcResult result = mockMvc.perform(request)
            .andExpect(status().isOk()).andReturn(); }

我很困惑,有人知道我是否缺少某些设置吗?谢谢!

4

1 回答 1

2

没有一个指定的注解会启动一个 Spring 容器:

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = myControl.class)
@WebAppConfiguration
@AutoConfigureMockMvc

要编写专注于控制器的测试切片,请不要使用 Mockito 运行器:@RunWith(MockitoJUnitRunner.class)否则您无法启动 Spring 容器。 MockitoJUnitRunner用于单元测试,而不是集成测试。
要了解何时以及如何使用 Spring Boot 编写单元和集成测试,您可以阅读这个问题

而不是将@WebMvcTest注释与 Spring runner 一起使用,例如:

import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@WebMvcTest
public class WebLayerTest {
   ...
}

您可以依靠此Spring 指南了解更多详细信息。

于 2018-08-29T20:42:05.687 回答