我正在尝试编写单元测试来验证请求是否返回静态html文件的内容。运行服务器时会呈现页面,但测试响应中没有内容。
控制器类:
@Controller
public class IndexController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "index.html";
}
}
测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class IndexControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void shouldReturnIndexPage() throws Exception {
File index = new ClassPathResource("static/index.html").getFile();
String html = new Scanner(index).useDelimiter("\\z").next();
mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(view().name("index.html"))
.andExpect(content().string(html));
}
}
我错过了什么?
编辑:
我有一个工作测试,涉及实际启动服务器。然而,我的目标是不必使用@WebMvcTest
来做到这一点。不确定这是否可能。我认为这是一种解决方法(除非它是唯一的方法),我仍在寻找解决方案(不需要启动服务器)。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class IndexControllerTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void shouldReturnIndexPage() throws Exception {
File index = new ClassPathResource("static/index.html").getFile();
String html = new Scanner(index).useDelimiter("\\z").next();
String responseBody = restTemplate.getForObject("/", String.class);
assertThat(responseBody).isEqualTo(html);
}
}
答案 0 :(得分:1)
我遇到了同样问题的问题,我设法使用 MockMvc 来构建测试
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class homePageControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testIndex() throws Exception{
File login = new ClassPathResource("static/login.html").getFile();
String html = new String(Files.readAllBytes(login.toPath()));
this.mockMvc.perform(get("/login.html"))
.andExpect(status().isOk())
.andExpect(content().string(html))
.andDo(print());
}
}
通过执行http请求进行测试时,您必须生成整个服务器,因此他可以处理请求,即标题,状态等
希望有所帮助