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)等

 

posted @ 2018-09-01 20:34  Trami  阅读(288)  评论(0编辑  收藏  举报