我正在使用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(); }
我很困惑,有人知道我是否缺少某些设置吗?谢谢!
答案 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来获取更多详细信息。