Python单元测试-unittest
一、简介
学习使用unittest进行单元测试。
测试过程中需要通过属性断言对结果进行判断, 以验证结果是否满足需求。TestCase类提供了多种强大的断言方法, 如asserTrue, assertFalse, assertEqual,assertNotEqual, assertIs等。参考文档见 https://docs.python.org/3/library/unittest.html
这些断言方法可以在断言的同时加上一个message参数,这样可以使断言的意义明确而且方便维护, 在测试失败时抛出可读的信息。
二、测试步骤import unittest
定义一个继承自unittest.TestCase的测试用例类
定义setUp和tearDown, 在每个测试用例前后做一些辅助工作
定义测试用例, 名字以test开头
一个测试用例应该只测试一个方面, 测试目的和测试内容应很明确。 主要是调用assertEqual、 assertRaises等断言方法判断程序执行结果和预期值是否相符
调用unittest.main()启动测试
如果测试未通过, 会输出相应的错误提示; 如果测试全部通过则显示ok, 添加-v参数显示详细信息。
三、mock
Python 3.3开始内置了Mock工具包, 可以使用mock对象替代掉指定的Python对象, 以达到模拟对象的行为。
Mock类: 用于创建mock对象, 当访问mock对象的某个属性时, mock对象会自动创建该属性。
MagicMock类: Mock对象的子类, 预先定义了操作符(如lt, len) 。
patch装饰器: 可以将其作用在测试方法上, 限定在当前测试方法中使用mock来替换真实对象。
属性断言: mock对象提供了一系列断言方法, 可以在使用属性断言时判断程序对mock对象的调用是否符合预期。
assert_called_with, assert_called_once_with, assert_any_call, assert_has_calls https://docs.python.org/3/library/unittest.mock.html#the-mock-class
行为控制: 通常程序需要从依赖对象的方法上取得返回值, mock对象也提供了一 些途径对返回值进行控制。
return_value: 固