一、Unittest 单元测试 将测试结果和期望值作对比
(1) 继承
(2) 引用包
(3) 执行一次test就会调用一次setup和tearDown
(4) 类名以test开头
(5) 断言异常
(6) 有一个点表示通过一个测试用例
二、如果有一个单元测试执行失败,抛异常或断言失败,依然会被执行。断言失败会显示E
凡是以test开头的方法都是测试方法,反之不是,测试时候不会执行。其中,unittest.TestCase提供很多内置的条件判断,我们可以调用这些方法断言输出是否是我们所预计的。
一般分为两种,一种是assertEqual():断言某两个结果是否一致。一种是assertRaises():断言是否是期待抛出的指定错误类型。
另外,可以通过在单元测试中增加两个特殊函数setUp()和tearDown()函数,已实现在每调用一个测试方法的前后分别执行指定的动作,其中setUp是在测试函数调用前执行,tearDown是在之后执行,每次执行用例时都会: setUp->test_case->tearDown ;也就是说可以使用setUp和tearDown做每个用例的环境初始化
dome1:
每次执行用例时都会: setUp->test_case->tearDown ;也就是说可以使用setUp和tearDown做每个用例的环境初始化
1 import unittest 2 3 4 class MyTestCase(unittest.TestCase): 5 # 预置环境 6 def setUp(self): 7 print '开始执行' 8 9 # 清理环境 10 def tearDown(self): 11 print '结束执行' 12 13 # 测试用例 14 def test_case1(self): 15 print '用例1' 16 17 # 测试用例 18 def test_case2(self): 19 print '用例2' 20 21 if __name__ == '__main__': 22 unittest.main()
dome2:
每个class用一次,setUpClass->test_case1->test_case2->tearDownClass;也就是说使用setUpClass、tearDownClass可以做所有用例的前置初始化和结束
1 import unittest 2 3 4 class MyTestCase(unittest.TestCase): 5 @classmethod 6 def setUpClass(cls): 7 print '开始执行' 8 9 @classmethod 10 def tearDownClass(cls): 11 print '结束执行' 12 13 # 测试用例 14 def test_case1(self): 15 print '用例1' 16 17 # 测试用例 18 def test_case2(self): 19 print '用例2' 20 21 if __name__ == '__main__': 22 unittest.main()
三、unittest练习
#写一个读文件的类,里面有个方法可以读取文件的全部内容。
#写个单元测试,断言文件中包含关键字"glory road"
main.py
1 import unittest 2 import random 3 from handle_file import HandleFile 4 5 class TestSequenceFunctions(unittest.TestCase): 6 def test_run(self): 7 content = HandleFile.read_file("e:\test4\ip.txt") 8 self.assertTrue("glory road" in content) 9 10 if __name__ == "__main__": 11 unittest.main()
handle_file.py
1 import os 2 3 class HandleFile(): 4 @staticmethod 5 def read_file(file_path): 6 if os.path.exists(file_path): 7 with open(file_path) as f: 8 return f.read() 9 else: 10 return "no file" 11 12 13 14 if __name__=="__main__": 15 hf=HandleFile() 16 print hf.read_file("e:\test4\ip.txt")
2