什么是单元测试
程序开发过程中,写代码是为了实现需求。当我们的代码通过了编译,只是说明它的语法正确,功能能否实现则不能保证。 因此,当我们的某些功能代码完成后,为了检验其是否满足程序的需求。可以通过编写测试代码,模拟程序运行的过程,检验功能代码是否符合预期。
单元测试就是开发者编写一小段代码,检验目标代码的功能是否符合预期。通常情况下,单元测试主要面向一些功能单一的模块进行。举个例子:一部手机有许多零部件组成,在正式组装一部手机前,手机内部的各个零部件,CPU、内存、电池、摄像头等,都要进行测试,这就是单元测试。
在Web开发过程中,单元测试实际上就是一些“断言”(assert)代码。断言就是判断一个函数或对象的一个方法所产生的结果是否符合你期望的那个结果。 python中assert断言是声明布尔值为真的判定,如果表达式为假会发生异常。单元测试中,一般使用assert来断言结果。
常见的断言方法
assertEqual 如果两个值相等,则pass
assertNotEqual 如果两个值不相等,则pass
assertTrue 判断bool值为True,则pass
assertFalse 判断bool值为False,则pass
assertIsNone 不存在,则pass
assertIsNotNone 存在,则pass
如何测试
首先,定义一个类,继承自unittest.TestCase;其次,在测试类中,定义两个测试方法;最后,在测试类中,编写测试代码。
[Python] 纯文本查看 复制代码 import unittest
class TestClass(unittest.TestCase):
#该方法会首先执行,相当于做测试前的准备工作
def setUp(self):
pass
#该方法会在测试代码执行完后执行,相当于做测试后的扫尾工作
def tearDown(self):
pass
#测试代码
def test_add(self):
pass
案例
我们随意写几个业务函数,表示我们将要进行测试的功能函数。将功能函数文件存储成funcmath.py
[Python] 纯文本查看 复制代码 def add(a, b):
return a+b
def minus(a, b):
return a-b
我们通过测试用例用代码来实现每一个测试的详细过程和针对测试目标要测试的内容。同目录下创建test_funcmath.py
[Python] 纯文本查看 复制代码 import unittest
from funcmath import *
class TestFuncMath(unittest.TestCase):
@classmethod
def tearDownClass(cls):
print("这里是所有测试用例后的清理工作")
# TestCase基类方法,每次执行case前自动执行
def setUp(self):
print("这里是一个测试用例前的准备工作")
def test_add(self):
self.assertEqual(7, add(5, 2))
self.assertNotEqual(7, add(5, 2)) # 测试方法add
def test_minus(self):
self.assertEqual(1, minus(3, 2)) # 测试方法minus
if __name__ == '__main__':
unittest.main()
|