使用模拟对象打破紧密耦合
在软件开发中,单元测试和测试驱动开发是快速构建可靠程序的最佳实践方法。在之前的学习中,我们了解了单元测试的定义、它在开发过程各阶段的作用以及如何使用它来驱动开发。现在,我们将探讨如何借助模拟对象(Mock Objects)更轻松地隔离测试。
1. 模拟对象的概念
“Mock”在这种语境下意味着“模仿”,模拟对象正是如此。它模仿构成程序的真实对象,但实际上并非这些对象,也不依赖它们。模拟对象执行预定义的简单操作,看起来就像真实对象应该做的那样。其方法会返回你指定的值,或者抛出你指定的异常。
例如,我们之前用一个对象替换了 time.time
,该对象返回一个递增的数字序列。这个模拟对象就像 time.time
,但无论何时运行测试,或者计算机速度如何,它总是返回相同的数字序列。这就将测试与外部变量解耦了。模拟对象的核心就是将测试与外部变量解耦,这些变量有时是外部时间或处理器速度,但通常是其他单元的行为。
2. Python Mocker 工具
手动创建模拟对象可能是一个复杂且烦人的过程,还会影响测试的可读性。Python Mocker 就是这样一个模拟对象工具包,能帮助我们更轻松地创建和管理模拟对象。
2.1 安装 Python Mocker
Python Mocker 不在标准 Python 发行版中,因此需要手动下载和安装。安装步骤如下:
1. 访问 Python Mocker 的主页 http:/