junit无法在资源文件夹中加载值

时间:2018-08-29 20:33:38

标签: java junit-runner

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

任何指定的注释都不会启动Spring容器:

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

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

而不是将@WebMvcTest批注与Spring运行程序一起使用,例如:

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

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

您可以依靠此Spring guide来获取更多详细信息。