【发布时间】:2016-10-29 22:17:15
【问题描述】:
我是 Spring Boot 1.4 测试的新手,正在尝试使用新功能。我有一个简单的 Spring MVC 控制器。
@Controller
public class IndexController {
@RequestMapping("/")
String index(){
return "index";
}
}
控制器返回一个 Thymeleaf 模板,其中包含字符串 Hello
我已经编写了以下单元测试并且运行良好:
@RunWith(SpringRunner.class)
@WebMvcTest(IndexController.class)
public class SpringMvcTestApplicationTests {
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(new IndexController()).build();
}
@Test
public void testIndex() throws Exception{
MvcResult result= this.mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(view().name("index"))
.andReturn();
String content = result.getResponse().getContentAsString();
assertNotNull(content);
}
}
但我读过许多注释提供了特定于测试的额外自动配置。例如,如果您使用@WebMvcTest,您可以@Autowire 一个完全配置的MockMvc 实例。。我还看到了自动装配 MockMvc 的示例。
但是当我在删除@Before方法后添加下面的自动装配代码时,测试失败了。
@Autowired
private MockMvc mockMvc;
断言错误是:
java.lang.AssertionError: Status
Expected :200
Actual :401
第二个问题是,我想测试一下 Thymeleaf 返回的内容。我测试过:
.andExpect(content().string("Hello"))
还有
.andExpect(content().string(Matchers.containsString("Hello")))
还有
assertEquals("Hello", content);
在检查时,我发现内容是一个空字符串,因此测试失败:
org.junit.ComparisonFailure:
Expected :Hello
Actual :
如何测试内容。
提前致谢。
【问题讨论】:
标签: spring-mvc thymeleaf spring-test-mvc