我正在尝试编写我的第一个Spring MVC测试,但是我只是无法让Spring Boot将MockMvc依赖项注入到我的测试类中。这是我的课:
@WebMvcTest
public class WhyWontThisWorkTest {
private static final String myUri = "uri";
private static final String jsonFileName = "myRequestBody.json";
@Autowired
private MockMvc mockMvc;
@Test
public void iMustBeMissingSomething() throws Exception {
byte[] jsonFile = Files.readAllBytes(Paths.get("src/test/resources/" + jsonFileName));
mockMvc.perform(
MockMvcRequestBuilders.post(myUri)
.content(jsonFile)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().is2xxSuccessful());
}
}
我已经与IntelliJ的调试器进行了检查,可以确认嘲笑Mvc本身为null。因此,所有异常消息告诉我的是“ java.lang.NullPointerException”。
我已经尝试为“ @SpringBootTest”或“ @RunWith(SpringRunner.class)”之类的测试类添加更多常规的Spring Boot注释,以防它与初始化Spring有关但没有运气。
奇怪,前提是您还尝试了@RunWith(SpringRunner.class)
和@SpringBootTest
。您是否也尝试过@AutoConfigureMockMvc
注释?下面的示例工作正常。
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void getHello() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Hello World of Spring Boot")));
}
}
在这里完成样本
可能值得考虑以下有关@WebMvcTest和@AutoConfigureMockMvc注释用法的注释,如Spring文档中所述
默认情况下,用@WebMvcTest注释的测试还将自动配置Spring Security和MockMvc(包括对HtmlUnit WebClient和Selenium WebDriver的支持)。为了对MockMVC进行更细粒度的控制,可以使用@AutoConfigureMockMvc批注。
通常,@ WebMvcTest与@MockBean或@Import结合使用以创建@Controller bean所需的任何协作者。
如果要加载完整的应用程序配置并使用MockMVC,则应考虑将@SpringBootTest与@AutoConfigureMockMvc结合使用,而不要使用此注释。
使用JUnit 4时,应将此注释与@RunWith(SpringRunner.class)结合使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句