单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作.
这种以测试为驱动的开发模式最大的好处就是确保一个程序模块的行为符合我们设计的测试用例。在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的,这种模式也被称为TDD
二、测试用例TestCase
软件测试中最基本的组成单元式测试用例(test case),PyUnit使用TestCase类来表示测试用例,并要求所有用于执行测试的类都必须从该类继承。TestCase子类实现的测试代码应该是自包含的(self contained),即测试用例既可以单独运行,也可以和其它测试用例构成集合共同运行。TestCase类中常用的函数或方法有:
setUp:进行测试前的初始化工作。
tearDown:执行测试后的清除工作。
failedinfo:表示不成立打印信息faliedinfo,为可选参数。
self.assertEqual(value1, value2, failedinfo):会无条件的导致测试失败,不推荐使用。
self.assertTrue(, failedinfo):断言value1 == value2。
self.assertFalse(, failedinfo):断言value为真。
self.assertRaises(ValueError, self.widget.resize, -1, -1):断言肯定发生异常,如果没发生异常,则为测试失败。参数1为异常,参数2为抛出异常的调用对象,其余参数为传递给可调用对象的参数。
TestCase在PyUnit测试框架中被视为测试单元的运行实体,Python程序员可以通过它派生自定义的测试过程与方法(测试单元),利用Command和Composite设计模式,多个TestCase还可以组合成测试用例集合。PyUnit测试框架在运行一个测试用例时,TestCase子类定义的setUp()、runTest()和tearDown()方法被依次执行,最简单的测试用例只需要覆盖runTest()方法来执行特定的测试代码就可以了。
对函数进行单元测试
'''
单元测试:
作用:用来对一个函数,一个类或者一个模块来进行正确性校验工作
结果:
单元测试通过 说明我们测试的函数功能正常
单元测试不通过:说明函数功能有问题或者测试条件输入有误
'''
def mysum(x,y):
x+=1
return x + y
def mysub(x,y):
return x -y
print(mysum(1,2))
import unittest
from 对函数进行单元测试 import mysum,mysub
class Test(unittest.TestCase):
def setUp(self):
print("开始测试时自动调用")
def tearDown(self):
print("结束测试时自动调用")
# 测试mysum
def test_mysum(self):
self.assertEqual(mysum(1,2),3,"加法有误")
def test_mysum(self):
self.assertEqual(mysum(2,1),1,"减法有误")
if __name__ == '__main__':
unittest.main()
对类进行单元测试
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def getvar(self):
return self.age +1
from person import Person
per = Person("tom",20)
print(per.getvar())
import unittest
from person import Person
class Test(unittest.TestCase):
def test_init(self):
p = Person('jerry',25)
self.assertEqual(p.name,'jerry',"属性赋值有误")
def test_getvar(self):
p = Person('jerry', 25)
self.assertEqual(p.getvar(),p.name,'函数有误')
if __name__ == '__main__':
unittest.main()
文档测试
import doctest
# 可以提取注释中的代码去执行,严格按照python交互模式的输入
# 提取
def mysum(x,y):
'''
get the sum of x,y
:param x: firstnum
:param y: secondnum
:return: sum
example:
>>> print(mysum(1,2))#注意此处的空格必须有一个空格
3
'''
return x + y +1
print(mysum(1,2))
# 进行文档测试
doctest.testmod()