Python使用单元测试
单元测试是用来对一个函数、一个类或者一个模块进行正确性检验的测试工作。
使用unittest模块做单元测试
1)对函数进行测试
下面是一个简单的函数,它接收名和姓,返回整洁的姓名:
name_function.py
def get_formatted_name(first, last): full_name = first + ' ' + last return full_name.title()
函数get_formatted_name将名和姓组成一个完整的名字,并在名和姓之间添加一个空格,同时将首字母大写,再返回结果。
单元测试这样写:
test_name_function.py
import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): ''' test_function Begin''' def test_first_last_name(self): formatted_name = get_formatted_name('du','xiaodong') self.assertEqual(formatted_name,'Du Xiaodong')
unittest.main()
需要注意的是,1.引入了unittest模块并且NamesTestCase需要继承unittest.TestCase类。2.所有的测试函数都需要是test_function开头,并且需要在代码最后执行unittest.main()
当执行测试文件时,测试用例就会被自动执行。如果你的测试正确,执行python test_name_function.py,显示如下:
---------------------------------------------------------------------- Ran 1 test in 0.000s OK
2)对类进行测试
这里写一个类Employee,其中__init__()接收姓名和年薪,其中give_raise()这个方法是加薪,默认加薪5000。
Employee.py
class Employee(): def __init__(self,name,salary): self.name = name self.salary = salary def give_raise(self,money = 5000): self.salary += money
测试类test_Employee.py
import unittest from Employee import Employee class TestEmployee(unittest.TestCase): def setUp(self): self.employee = Employee('Du Xidong', 100000) def test_raise(self): self.employee.give_raise(10000) self.assertEqual(110000,self.employee.salary) unittest.main()
这里需要指出的是setUp()这个方法类构造的时候会被执行,然后运行 python test_Employee.py会得到如下的结果:即测试用例通过
---------------------------------------------------------------------- Ran 1 test in 0.001s OK
总结
1、单元测试类必须继承unit.TestCase类,2、测试函数必须以test_function开头,3、使用断言assertEqual或者其他单元具体查看unittest module中的断言方法assertIn(item,list)等