8、模拟web环境测试控制器--MockMvc对象


模拟 web环境 测试控制器

模拟web环境:不需要真正启动web服务器,只是对web环境进行简单的模拟。


涉及注解:

1、@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)

2、@AutoConfigureMockMvc 贴这个注解,就可以在测试类注入一个MockMvc类型的实例变量。通过MockMvc这个实例变量可用于模拟浏览器来发送请求,获取返回值:ModelAndView


测试方法编写步骤:

1、用MockMvc向指定URL发送模拟请求,获取控制器返回的ModelAndView

2、用Assertions的断言方法断言ModelAndView中的数据与期望数据一致


测试:

测试最开始的index方法,该方法只是返回一个视图页面

用@AutoConfigureMockMvc 这个注解来的到依赖注入的对象 MockMvc,用这个对象来模拟浏览器发送请求。

在这里插入图片描述


测试添加书籍的方法

测试添加书籍的方法,该方法返回的也是一个视图,mvc流程

注意映射路径和参数的使用方式

在这里插入图片描述


测试查询书籍的方法

在这里插入图片描述


测试删除的方法

注意点:断言的时候,测试model里面的视图名称,跟重定向的路径是否一致,需要把整个return的路径拿来判断,不能只写 /listBooks, 要写全:“redirect:/listBooks”

在这里插入图片描述


具体代码


@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class MvcControllerTest {

    //这个 MockMvc 的作用类似于测试RestFul API 的TestRestTemplate
    //区别:这个是用来模拟浏览器发送各种请求(get、post)
    @Autowired
    private MockMvc mockMvc;

    //测试 index 方法,index方法返回的是一个视图
    @Test
    public void testIndex() throws Exception {
        //发送请求
        ModelAndView mv = mockMvc.perform(MockMvcRequestBuilders.get("/index"))
                .andReturn()  //返回的结果
                .getModelAndView();  //获取返回结果的model

        //断言ModelAndView中封装的信息与期望的信息是否一致
        //判断提示信息
        Assertions.assertEquals("第一个springboot页面",mv.getModel().get("controllerPage"));
        //判断返回的model页面是否一致
        Assertions.assertEquals("first",mv.getViewName());

    }

    //测试 添加书籍的方法,原本的添加书籍的方法返回的是视图页面
    //参数化测试,可以让方法进行多次测试
    @ParameterizedTest //允许测试方法接收参数进行测试,和注解 @CsvSource 一起使用,@CsvSource注解用来写参数数据
    //参数是一个数组,数组里面的每一个元素就是方法的参数
    @CsvSource({"书籍AA,100,ljh", "书籍BB,110,ljh", "书籍CC,120,ljh"})
    public void testAddBook(String  name , BigDecimal price , String author) throws Exception {

        ModelAndView mv = mockMvc.perform(MockMvcRequestBuilders.post("/addBook")
                .param("name", name)
                .param("price", price + "")  //参数通过http发送,都得是 String 类型的
                .param("author", author)
        ).andReturn().getModelAndView();

        //断言视图数据是否一致
        Assertions.assertEquals("redirect:listBooks",mv.getViewName());
    }


    //测试查询的方法---原方法返回的是视图
    @Test
    public void testList() throws Exception {
        ModelAndView mv = mockMvc.perform(MockMvcRequestBuilders.get("/listBooks"))
                .andReturn().getModelAndView();
        //断言返回的视图是否一致
        Assertions.assertEquals("listBooks",mv.getViewName());
        //打印出返回的数据 //强壮
        Object books = mv.getModel().get("books");
    }

    //测试删除的方法--原方法返回的是视图
    @ParameterizedTest
    @ValueSource(ints = {73,74,79})
    public void testDeleteBookById(Integer id) throws Exception {

        //获取视图
        ModelAndView mv = mockMvc.perform(MockMvcRequestBuilders.get("/deleteBook/{0}", id))
                .andReturn().getModelAndView();
        //断言测试
        Assertions.assertEquals("redirect:/listBooks",mv.getViewName());
      
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值