【问题标题】:junit couldn't load the value in resource folderjunit 无法加载资源文件夹中的值
【发布时间】:2019-02-04 17:29:56
【问题描述】:

我正在使用 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(); }

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

【问题讨论】:

  • spring 上下文是否正在加载该配置?
  • 你试过加@TestPropertySource吗?
  • 如何运行测试?你使用构建自动化工具(maven、gradle..)吗?

标签: java junit-runner


【解决方案1】:

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

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

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

使用 @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 guide 了解更多详细信息。

【讨论】:

  • 我也用过springRunner,还是一样的问题
  • 你也不必使用 springRunner,你只需要使用它。单个运行器可用于启动 JUnit 4 测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2011-04-09
相关资源
最近更新 更多