python进阶-2.1单元测试unittest

unittest概念及原理

PyUnit(unittest) 是 Python 自带的单元测试框架,用于编写和运行可重复的测试。PyUnit 是 xUnit 体系的一个成员,xUnit 是众多测试框架的总称,PyUnit 主要用于进行白盒测试和回归测试。
unittest核心概念:

  • TestCase(测试用例): 所有测试用例的基类,它是软件 测试中最基本的组成单元。一个test case就是一个测试用例,是一个完整的测试流程,包括测试前环境的搭建setUp,执行测试代码(run),以及测试后环境的还原(tearDown)。测试用例是一个完整的测试单元,可以对某一问题进行验证。
  • TestSuite(测试套件):多个测试用例test case集合就是TestSuite,TestSuite可以嵌套TestSuite
  • TestLoder:是用来加载 TestCase到TestSuite中,其中有几个loadTestsFrom_()方法,就是从各个地方寻找TestCase,创建他们的实例,然后add到TestSuite中,再返回一个TestSuite实例
  • TextTestRunner:是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。
  • TextTestResult:测试结果会保存到TextTestResult实例中,包括运行了多少用例,成功与失败多少等信息
  • TestFixture:又叫测试脚手,测试代码的运行环境,指测试准备前和执行后要做的工作,包括setUp和tearDown方法
    测试流程:
  1. 写好TestCase:一个class继承unittest.TestCase,就是一个测试的测试用例,其中有多个以test开头的方法,那么每一个这样的,在load的时候会生成一个TestCase实例。如果一个class中有四个test开头的方法,最后load到suite中时则有四个测试用例
  2. 由TestLoder加载TestCase到TestSuite
  3. 然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中。
    说明:a:通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者可以直接通过TextTestRunner来执行用例
    b:Runner执行时,默认将结果输出到控制台,我们可以设置其输出到文件,在文件中查看结果,也可以通过HTMLTestRunner将结果输出到HTML(这个需要下载HTMLTestRunner.py,并放到当前目录下,或者你的’D:\Python37\Lib’下,就可以导入运行了)

所有测试的本质其实都是一样的,都是通过给定参数来执行函数,然后判断函数的实际输出结果和期望输出结果是否一致。PyUnit 测试与其他 xUnit 的套路一样,基于断言机制来判断函数或方法的实际输出结果和期望输出结果是否一致,测试用例提供参数来执行函数或方法,获取它们的执行结果,然后使用断言方法来判断该函数或方法的输出结果与期望输出结果是否一致,如果一致则说明测试通过;如果不一致则说明测试不通过。

unittest中断言详解

  1. 基本的布尔断言
    即:要么正确,要么错误的验证,有一个共同点:都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。主要有以下:
断言方法 断言描述
assertEqual(arg1, arg2, msg=None) 验证arg1=arg2,不等则fail
assertNotEqual(arg1, arg2, msg=None) 验证arg1 != arg2, 相等则fail
assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail
assertFalse(expr,msg=None) 验证expr是false,如果为true,则fail
assertIs(arg1, arg2, msg=None) 验证arg1、arg2是同一个对象,不是则fail
assertIsNot(arg1, arg2, msg=None) 验证arg1、arg2不是同一个对象,是则fail
assertIsNone(expr, msg=None) 验证expr是None,不是则fail
assertIsNotNone(expr, msg=None) 验证expr不是None,是则fail
assertIn(arg1, arg2, msg=None) 验证arg1是arg2的子串,不是则fail
assertNotIn(arg1, arg2, msg=None) 验证arg1不是arg2的子串,是则fail
assertIsInstance(obj, cls, msg=None) 验证obj是cls的实例,不是则fail
assertNotIsInstance(obj, cls, msg=None) 验证obj不是cls的实例,是则fail

代码示例:

import unittest
import sys
class demoTest(unittest.TestCase):
    def test1(self):
        self.assertEqual(4 + 5,9)     
    def test2(self):
        self.assertNotEqual(5 * 2,10)         
    def test3(self):
        self.assertTrue(4 + 5 == 9,"The result is False")                   
    def test4(self):
        self.assertTrue(4 + 5 == 10,"assertion fails")                  
    def test5(self):
        self.assertIn(3,[1,2,3])                   
    def test6(self):
        self.assertNotIn(3, range(5))
unittest.main()

结果:

E:\pythonCode>python sayhello.py
.F.F.F
======================================================
FAIL: test2 (__main__.demoTest)
------------------------------------------------------
Traceback (most recent call last):
  File "sayhello.py", line 8, in test2
    self.assertNotEqual(5 * 2,10)
AssertionError: 10 == 10
======================================================
FAIL: test4 (__main__.demoTest)
------------------------------------------------------
Traceback (most recent call last):
  File "sayhello.py", line 14, in test4
    self.assertTrue(4 + 5 == 10,"assertion fails")
AssertionError: False is not true : assertion fails
========================================&#
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值