Skip to content

测试驱动开发

测试驱动开发

简介

测试驱动开发(Test-Driven Development,TDD)是一种软件开发方法,其核心理念是在编写实际代码之前先编写测试代码。通过迭代的方式,先编写测试用例,然后编写足以通过这些测试用例的最小量代码,最后进行重构,以确保代码的质量和稳定性。

应用场景

  • 新功能开发。
  • 代码需求重构

如何使用TDD

  1. 拿到需求时,从其输入与输出入手。
  2. 编写测试用例与断言,保证函数能够执行通过。
  3. 最后再编写业务代码。
  4. 执行测试用例。
  5. 重复:编写业务代码 -> 执行测试用例这两个步骤。

示例

  1. 需求1: 实现一个简单求和算法。首先先编写测试用例:
def get_sum(a,b):
    pass

def test_get_sum():
    assert get_sum(1, 2) == 3
    assert get_sum(0, 1) == 1
    assert get_sum(-1, 1) == 0
  1. 接下来则实现该被测函数
def get_sum(a,b):
    return a+b

def test_get_sum():
    assert get_sum(1, 2) == 3
    assert get_sum(0, 1) == 1
    assert get_sum(-1, 1) == 0
  1. 在需求1的基础之上,添加一个判断条件,如果输入的数据不为 int 类型则直接返回False。逻辑修改之后先补充测试用例
def get_sum(a,b):
    return a+b

def test_get_sum():
    assert get_sum(1, 2) == 3
    assert get_sum(0, 1) == 1
    assert get_sum(-1, 1) == 0
    assert get_sum("a", 1) == False
    assert get_sum(1, "b") == False
  1. 再实现该被测函数
def get_sum(a,b):
    if isinstance(a, int) and isinstance(b, int):
        return a+b
    else:
        return False

def test_get_sum():
    assert get_sum(1, 2) == 3
    assert get_sum(0, 1) == 1
    assert get_sum(-1, 1) == 0
    assert get_sum("a", 1) == False
    assert get_sum(1, "b") == False

总结

由以上的几个小步骤可以看出,TDD 相比与直接开发的优点为:

  1. 更好的梳理开发思路。
  2. 更好的保障已有的代码的质量。