unittest:单元测试框架
主要包含四部分:
1、测试固件(test fixture):
定义:包含执行测试前的准备setUP()、测试执行完后的清扫工作tearDown()
注意:
setUp()执行成功之后,不管test中有没有异常发生,tearDown()都会执行
测试固件在每个test都会执行
执行一次:使用setUpClass()和tearDownClass()可以的得到这样的效果,必须被装饰成classmethod
2、测试用例(test case):
定义:包含测试固件、具体测试代码函数,测试固件可以不要,但至少要有一个以小写test开头的函数
实现:使用装饰器@unittest.skip可以跳过某个测试用例不执行
3、测试套件(test suite):
定义:
很多测试用例的集合,通过测试套件来管理多个测试用例,会根据用例的加载顺序执行用例
实现:
1、第一种:
使用TestSuite()初始化一个Suite实例 unittest.TestSuite()
使用addTest()方法加载测试方法到测试套件中
addTest()如果要在传入别的包下的测试方法:  包名.类名(测试方法函数)
也可以使用addTests()方法
suite.addTests((lesson('test_case1'),lesson('test_case2')))
2、第二种:
makeSuite()可以把一个类下面所有测试方法都加载到测试套件中
suite = unittest.TestSuite(unittest.makeSuite(包名.类名))
3、第三种:
discover()方法可以把指定路径下所有测试方法都加载到测试套件中
discover = unittest.defaultTestLoader.discover(test_dir, pattern='lesson*.py')
4、测试执行器(test runner):
定义:测试执行器用来执行加载测试用例,可以是一个测试用例,也可以是测试套件
实现方法:
1、上方实例中的直接使用unittest.main()去执行 ,
会搜索所有以test开头的测试用例,按照ASCII的顺序执行多个用例
2、使用TextTestRunner()方法初始化一个测试执行器,然后使用run()去执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite) suite 指测试套件的实例


unittest使用_固件unittest使用_固件_02


import unittest
# 被测测试类
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def get_grade(self):
if self.score < 0 or self.score > 100:
raise ValueError("传入分数错误,不在0-100之间")
if self.score >= 80:
return 'A'
if self.score >= 60:
return 'B'
return 'C'
class TestStudent(unittest.TestCase):
# 测试方法
def test_80_to_100(self):
s1 = Student('Bart', 80)
s2 = Student('Lisa', 100)
self.assertEqual(s1.get_grade(), 'A')
self.assertEqual(s2.get_grade(), 'A')
def test_60_to_80(self):
s1 = Student('Bart', 60)
s2 = Student('Lisa', 79)
self.assertEqual(s1.get_grade(), 'B')
self.assertEqual(s2.get_grade(), 'B')
def test_0_to_60(self):
s1 = Student('Bart', 0)
s2 = Student('Lisa', 59)
self.assertEqual(s1.get_grade(), 'C')
self.assertEqual(s2.get_grade(), 'C')
def test_invalid(self):
s1 = Student('Bart', -1)
s2 = Student('Lisa', 101)
# 判断抛出指定类型的Error
with self.assertRaises(ValueError):
s1.get_grade()
with self.assertRaises(ValueError):
s2.get_grade()
if __name__ == '__main__':
unittest.main()

View Code