单元测试的艺术

本文主要探讨了单元测试的概念、好处、不同类型、TDD开发流程以及单元测试框架的使用。通过实例展示了如何编写单元测试,强调了单元测试的可靠性、可读性和可维护性,并提出了编写优秀单元测试的准则。此外,还提到了Mock技术和一些常用的Java测试框架。
摘要由CSDN通过智能技术生成

本笔记主要来源于《单元测试的艺术》一书和本人些许经验

公众号,欢迎关注

什么是单元测试


没有人没做过单元测试

public class SimpleTest {

    public static String hello(String name) {

        return "Hello " + name;
    }
 

    public static void main(String[] args) {

        System.out.println(hello("Ronnie"));
    }
}

 

单元测试定义

  • 一个单元测试是一段自动化的代码,这段代码调用被测试的工作单元,之后对这个工作单元的单个最终结果的某些假设进行验证。单元测试几乎都是用单元测试框架编写的,能快速运行。单元测试可靠,可读,可维护。只要产品代码不发生变化,单元测试的结果是稳定的

 

集成测试,一般具有如下属性的,就认为是集成测试

  • 时间长
  • 不稳定
  • 有外部依赖

 

单元测试的好处

  • 可做开发文档
  • 重构或修改代码更有信心
  • 对自己的程序设计更清晰

 

测试的三种类型

  • 测试返回值
  • 测试系统状态改变
  • 测试第三方调用

 

TDD开发流程

  1. 编写一个会失败的测试
  2. 编写符合测试预期的产品代码,使测试通过
  3. 写下一个测试或者重构代码
  4. 循环下去


不是所有的TDD都能成功,成功的TDD需要一下三种核心技能

  1. 知道如何编写优秀的测试
  2. 在编码前编写测试
  3. 良好的测试设计


单元测试框架

  • 编写测试更容易
    • 提供基础类和接口
    • 含有代码级别的标记,用于标记测试方法的属性,@Test
    • 提供断言类,用于验证代码
  • 可以控制测试的执行策略
    • 发现测试
    • 自动运行
    • 显示运行期间状态
    • 用命令行自动话
  • 显示更详细的运行结果
    • 已运行测试数目
    • 未运行测试数目
    • 失败的测试数目
    • 失败的原因
    • ASSERT消息
    • 失败的代码位置
    • 异常信息

 

第一个单元测试

public class SampleTest {

    @Test

    public void testHello() {

        //prepare

        String expected = "Hello Ronnie";

        //call

        String result = Sample.hello("Ronnie");

        //validate
        assertEquals(result, expected, "not correct");
    }

}

 

单元测试三段式

  • 准备预期结果
  • 调用测试方法
  • 验证预期结果

 

单元测试核心技术


Mock/Stub

  • Mock和Stub都是模拟对象
  • Mock对象会使测试失败,测试时会对Mock对象进行断言
  • Stub就是模拟对象的行为,不需要被测试

使用Stub破除依赖,使用Mock验证交互

 

Mock框架实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值