Spring 启动 1.4 测试
Spring Boot 1.4 Testing
我是 Spring Boot 1.4 测试新手,正在尝试使用新功能。我有一个简单的 Spring MVC 控制器。
@Controller
public class IndexController {
@RequestMapping("/")
String index(){
return "index";
}
}
控制器正在返回一个包含字符串 Hello
的 Thymeleaf 模板
我写了下面的单元测试,运行 没问题:
@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 returns的内容。我测试了:
.andExpect(content().string("Hello"))
还有
.andExpect(content().string(Matchers.containsString("Hello")))
还有
assertEquals("Hello", content);
检查时,我发现内容是一个空字符串,因此测试失败:
org.junit.ComparisonFailure:
Expected :Hello
Actual :
如何测试内容。
提前致谢。
第一期:
使用@WebMvcTest 自动装配 MockMvc 的问题是它似乎默认启用了安全性(请参阅 https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/api/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTest.html),这导致断言的 401 未授权状态代码,因为 GET 请求“/”的安全检查失败。对于您的简单案例,坚持使用 'MockMvcBuilders.standaloneSetup()' 来创建您的 MockMvc 可能是最简单的。
您可以通过以下方式添加单行注释(确保也导入包)以防止 MockMvc 安全:
@WebMvcTest(IndexController.class)
@AutoConfigureMockMvc(secure=false)
public class IndexControllerTest {
我是 Spring Boot 1.4 测试新手,正在尝试使用新功能。我有一个简单的 Spring MVC 控制器。
@Controller
public class IndexController {
@RequestMapping("/")
String index(){
return "index";
}
}
控制器正在返回一个包含字符串 Hello
的 Thymeleaf 模板我写了下面的单元测试,运行 没问题:
@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 returns的内容。我测试了:
.andExpect(content().string("Hello"))
还有
.andExpect(content().string(Matchers.containsString("Hello")))
还有
assertEquals("Hello", content);
检查时,我发现内容是一个空字符串,因此测试失败:
org.junit.ComparisonFailure:
Expected :Hello
Actual :
如何测试内容。
提前致谢。
第一期:
使用@WebMvcTest 自动装配 MockMvc 的问题是它似乎默认启用了安全性(请参阅 https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/api/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTest.html),这导致断言的 401 未授权状态代码,因为 GET 请求“/”的安全检查失败。对于您的简单案例,坚持使用 'MockMvcBuilders.standaloneSetup()' 来创建您的 MockMvc 可能是最简单的。
您可以通过以下方式添加单行注释(确保也导入包)以防止 MockMvc 安全:
@WebMvcTest(IndexController.class)
@AutoConfigureMockMvc(secure=false)
public class IndexControllerTest {