MockMvc 单元测试

川长思鸟来 2022-04-25 06:12 397阅读 0赞

 MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
 MockMvcBuilder是用来构造MockMvc的构造器,其主要有两个实现:StandaloneMockMvcBuilder和DefaultMockMvcBuilder,分别对应两种测试方式,即独立安装和集成Web环境测试(此种方式并不会集成真正的web环境,而是通过相应的Mock API进行模拟测试,无须启动服务器)。对于我们来说直接使用静态工厂MockMvcBuilders创建即可。

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest()
  3. public class test {
  4. @Autowired
  5. private WebApplicationContext wac; // 注入WebApplicationContext
  6. private MockMvc mockMvc; // 模拟MVC对象。
  7. @Before // 在测试开始前初始化工作
  8. public void setup() {
  9. this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
  10. }
  11. @Test
  12. public void test() throws Exception {
  13. String responseString = mockMvc.perform(get("/test") //调用接口
  14. .contentType(MediaType.APPLICATION_JSON_UTF8) //指定请求的contentType头信息
  15. .param("name", "测试") 请求参数
  16. .param("phone", "18758694528")
  17. .accept(MediaType.APPLICATION_JSON)) //接收的类型
  18. .andExpect(status().isOk()) //判断接收到的状态是否200
  19. .andDo(print()) //打印出请求和相应的内容
  20. .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) //匹配返回值中的内容
  21. .andReturn().getResponse().getContentAsString();//将相应的数据转换为字符串
  22. System.out.println(responseString);
  23. }
  24. }

如果项目中使用了shiro框架。有可能报错:org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code

则需要添加以下内容:

  1. private ThreadState _threadState;
  2. protected Subject _mockSubject;
  3. @Before
  4. public void before() {
  5. _mockSubject = Mockito.mock(Subject.class);
  6. _threadState = new SubjectThreadState(_mockSubject);
  7. _threadState.bind();
  8. }

发表评论

表情:
评论列表 (有 0 条评论,397人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MockMvc 单元测试

     MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以