码迷,mamicode.com
首页 > 编程语言 > 详细

python单元测试之unittest框架

时间:2020-02-22 16:10:49      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:def   instance   参数   title   Fix   main   方法   pytho   rip   

python单元测试之unittest框架

一、什么是单元测试

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。

比如对于函数abs(),我们可以编写的测试用例为:

1)输入正数,比如1、1.2、0.99,期待返回值与输入相同

2)输入复数,比如-1、-1.2、-0.99,期待返回值与输入相反

3)输入0,期待返回0

4)输入非数值类型,比如None、[]、{}、期待抛出TypeError

把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试

 

我们先写一个需要测试的类:

import unittest 

class MathFunc:  

  def __init__(self,a,b):

    self.a = a

    self.b = b 

 

  def add(self):

    return self.a + self.b

 

  def multi(self):

    return self.a * self.b

 

二、unittest工作原理

unittest中最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture

再说这几个类之前,我们先来回顾一下自动化测试的步骤:

  1. 编写用例 TestCase
  2. 执行用例 TestSuite存储用例 TestLoader 加载用例
  3. 对比结果 期望结果 判定是否通过 assert
  4. 出具测试报告 TextTestRunner

class TestMathMulti(unittest.TestCase):

  # 一个用例就是一个函数 不能传参数 只有一个实例self

  # 所有用例都是test开头 否则unittest无法识别

  def test_Multi_positive(self):

    #测试两个正数相加

    res = MathFunc(1,2).multi()

    print(res)

  def test_Multi_zero(self):

    # 测试两个0相加

    res = MathFunc(0,0).multi() 

    print(res)

  def test_Multi_negative(self):

    #测试两个负数相加

    res = MathFunc(-1,-2).multi()

     print(res)

if __name__ == ‘__main__‘:

  unittest.main()

 

下面我们一条一条去执行:

import unittest 

from Prepares.class_01 import TestMathFunc

from HTMLTestRunner import HTMLTestRunner

# A class whose instances are single test cases.

# 这个类的实例是一个单独的用例

suite = unittest.TestSuite() # 存储用例 

suite.addTest(TestMathFunc("test_add_positive"))

# 执 

runner =unittest.TextTestRunner() runner.run(suite)

 

第二种方法:加载全部用例

# suite.addTest(loader.loadTestsFromTestCase(TestMathFunc)) 

from Prepares import class_01

loader = unittest.TestLoader()

suite.addTest(loader.loadTestsFromModule(class_01))

 

生成测试报告:

with open(‘UnittestTextReport.txt‘, ‘a‘) as f:

  runner = unittest.TextTestRunner(stream=f, verbosity=2)

  runner.run(suite)

生成HTML版的测试报告:

with open(‘HTMLReport.html‘, ‘wb‘) as f:

  runner = HTMLTestRunner(stream=f,

              title=‘MathFunc Test Report‘,

              description=‘generated by HTMLTestRunner.‘,

              verbosity=2 )

  runner.run(suite)

 

 

python单元测试之unittest框架

标签:def   instance   参数   title   Fix   main   方法   pytho   rip   

原文地址:https://www.cnblogs.com/caixinxiong/p/12345367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!