python模块分析之hashlib加密(二)python
TestLoader:加载或分发测试任务的调度器;单元测试
TestCase:测试用例的对象;测试
TestSuite:多个测试用例的容器;ui
TextTestRunner:执行测试用例的工做者;this
TextTestResult:测试结果保存的对象;
fixture:搭建一个测试环境;
# 使用断言方法 assertEqual 若是两个值相等,则pass assertNotEqual 若是两个值不相等,则pass assertTrue 判断bool值为True,则pass assertFalse 判断bool值为False,则pass assertIsNone 不存在,则pass assertIsNotNone 存在,则pass
# mytest.py def add(a, b): return a+b def minus(a, b): return a-b def multi(a, b): return a*b def divide(a, b): return a/b # test.py import unittest from mytest import * class MathTest(unittest.TestCase): '''测试main模块''' def test_add(self): '''测试add函数''' self.assertEqual(2,add(1,1)) def test_minus(self): '''测试minus函数''' self.assertEqual(2,minus(3,1)) def test_multi(self): '''测试multi函数''' self.assertEqual(15,multi(3,5)) def test_divide(self): '''测试divide函数''' self.assertEqual(2,divide(10,5)) if __name__ == '__main__': unittest.main(verbosity=1)
执行test.py文件得到测试的结果。
知识点
每一个继承TestCase的类都是一个测试用例,其中的每个以test开头的方法都是一个测试实例;
测试的实例必须以test开头,不然没法被识别;在方法下面加注释后,在测试的结果终端能够显示;
测试的执行时没有顺序的,完后后标志:成功是 .,失败是 F,出错是 E,跳过是 S。
unittest.main中的verbosity方法能够控制报告的详细程度,设为 0,则不输出每一用例的执行结果;若是设为 2,则输出详细的执行结果,默认为1;
import unittest class MathTest(unittest.TestCase): '''测试main模块''' def setUp(self): """测试前的准备工做""" pass def tearDown(self): """测试后的工做""" pass
import unittest class MathTest(unittest.TestCase): '''测试main模块''' @classmethod def setUpClass(cls): """测试前的准备工做""" pass @classmethod def tearDownClass(cls): """测试后的工做""" pass
# test_suite.py import unittest from mytest import MathTest if __name__ == '__main__': # 建立一个TestSuite的容器 suite = unittest.TestSuite() # 添加测试用例,指定按照添加的顺序来 tests = [MathTest("test_add"), MathTest("test_minus"), MathTest("test_divide")] # 在容器中加入 suite.addTests(tests) # 能够加入单个 # suite.addTest(MathTest("test_minus")) # 有时候咱们并不关注执行的顺序 tests2 = unittest.TestLoader().loadTestsFromTestCase(MathTest) tests1 = unittest.TestLoader().loadTestsFromTestCase(MathTest) # 以列表的形式加入,tests1和tests2是一个容器,容器能够嵌套容器 suite.addTests([test1,test2]) # 通常结果默认输出到终端,能够设置输出到文件 with open('UnittestTextReport.txt', 'a',encoding='utf-8') as f: runner = unittest.TextTestRunner(stream=f, verbosity=2) runner.run(suite)
unittest.skip(reason):无条件跳过,reason能够用来写跳过的缘由。
unittest.skipIf(condition, reason):当condition为True是跳过;condition能够是一个函数,类等任何对象;
unittest.skipUnless(condition, reason):当condition为False是跳过;
class MathTest(unittest.TestCase): '''测试main模块''' @unitteat.skip('skip this add') def test_add(self): '''测试add函数''' self.assertEqual(2,add(1,1))