TDD的简述及环境配置

TDD的简述及环境配置

描述

  • TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程

优点

  • 写出来的代码bug会比较少

缺点

  • 测试代码几乎是开发代码的一到两倍之多

配置环境

  • 在测试类上添加@RunWith和@SpringBootTest注解
    • @RunWith(SpringRunner.class)
      • 用SpringRunner来运行
    • @SpringBootTest(classes = net.seehope.security.demo.DemoApplication.class)
      • 对项目进行单元测试
    • 代码
    •   @RunWith(SpringRunner.class)
        @SpringBootTest(classes = net.seehope.security.demo.DemoApplication.class)
      
  • 测试类中注入WebApplicationContext类
    • 什么是WebApplicationContext
      • WebApplicationContext,是继承于ApplicationContext的一个接口,扩展了ApplicationContext,是专门为Web应用准备的,它允许从相对于Web根目录的路径中装载配置文件完成初始化。
    • 作用
      • 从WebApplicationContext中可以获得ServletContext的引用,整个Web应用上下文对象作为属性放置到ServletContext中,以便Web应用环境可以访问Spring应用上下文
    • 代码
    •   @Autowired
        private WebApplicationContext context;
      
  • 引入MockMvc类
    • 为何使用MockMvc?
      • 对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,所以为了可以对Controller进行测试,我们引入了MockMVC。
      • MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
    • 代码
    •   private MockMvc mockMvc;
      
  • 在测试类的前置通知里用MockMvcBuilders.webAppContextSetup(context).build();构建MockMvc
    • 代码
    •   @Before
        public void setUp(){
            mockMvc= MockMvcBuilders.webAppContextSetup(context).build();
        }
      

编写测试方法

  • 在方法头部添加@Test注解
  • 输入测试API
  • 指定数据格式(dataType)
  • 传入参数
  • 规定响应数据的结果
  • 代码如下
  •   @Test
      public void whenQueryAllUserSuccess() throws Exception {                                                          
          //输入测试API
          String result=mockMvc.perform(MockMvcRequestBuilders.get("/test/getUser")
                  //MediaType指的是要传递的数据的MIME类型,MediaType对象包含了三种信息:type 、subtype以及charset
                  .contentType(MediaType.parseMediaType("application/json"))
                  //向API传入变量
                  .param("username","wxb")
                  .param("password","asd")
          )
                  //规定响应数据的结果
                  .andExpect(MockMvcResultMatchers.status().isOk())
                  .andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(5))
                  .andExpect(MockMvcResultMatchers.jsonPath("$[0].username").value("username0"))
                  .andReturn().getResponse().getContentAsString();
            //输出测试结果
            System.out.println(result);
      }
    
posted @ 2020-03-28 23:36  陌攻  阅读(398)  评论(0编辑  收藏  举报