[88.程序调试与测试(8):单元测试] 零基础学python,简单粗暴

概述

  • 单元测试只是对工程中的代码单元(通常细化到每个函数)进行正确性验证的工作;
  • 对自己写的模块和类进行必要的单元测试,保证严谨正确,既是良好的开发习惯,也是一种规范;
  • Python中的标准库中单元测试的模块是单元测试;
import unittest

单元测试

待测试的工具类

# 待测的工具类
class MathUtil:

    # a,b相加
    def sum(self, a, b):
        return a + b

    # a,b相减
    def sub(self, a, b):
        return a - b

    # 判断a是否大于b
    def gt(self, a, b):
        return a > b

测试用例类,有以下几个要点:

  • 测试用例类必须继承unittest.TestCase生成生成
  • 具体的测试项函数必须以的的testXXX来命名
  • 设置()方法会在每个测试项执行前调用,如有必要的初始化工作可以通过覆写该方法来实现
  • TEARDOWN()方法会在每个测试项结束后调用,如有善后工作可以通过覆写该方法来实现
  • 在具体的测试项函数中,使用的测试用例的assertXXX系列函数预言结果
  • 如果程序执行结果与预测的一致,测该单项测试通过,否则不通过
# 测试用例类,必须继承于unittest.TestCase
class MathUtilTest(unittest.TestCase):
    '''MathUtil工具类测试用例'''

    # 测试项初始化方法
    def setUp(self):
        print("MathUtilTest setUp")
        self.mu = MathUtil()

    # 测试项结束时调用
    def tearDown(self):
        print("MathUtilTest tearDown")

    '''
    一系列的测试方法,都必须以testxxx命名
    '''

    # 测试MathUtil的sum方法
    def testSum(self):
        print("testSum...")

        # 断言相等
        self.assertEqual(self.mu.sum(3, 4), 7)

    # 测试MathUtil的sub方法
    def testSub(self):
        print("testSub...")

        # 断言相等
        self.assertEqual(self.mu.sub(3, 4), -1, "testSub failed!!!")

    # 测试MathUtil的gt方法
    def testGt(self):
        print("testOthers...")

        # 断言真假
        self.assertTrue(self.mu.gt(5, 4))
        self.assertFalse(self.mu.gt(4, 5))

        # 断言抛出异常
        with self.assertRaises(TypeError):
            self.mu.sum(1, "2")

执行单元测试

if __name__ == '__main__':

    # 运行当前模块中的所有测试用例
    unittest.main()

本次测试全部通过 

修改MathUtil的总和()方法,使其逻辑错误,观察这一次的单元测试结果

class MathUtil:
    def sum(self, a, b):
        return a - b

结果下显示testSum这一单项测试失败:AssertionError:-1!= 7结果结果-1与预测值7不相符: 

测试套件

  • unittest.main()方法会执行当前模块中的所有测试用例类中的所有测试项,这显得不太灵活;
  • unittest.TestSuite类是一个测试用例容器,可以按需添加测试用例于其中,使得单元测试既可以批量进行,又可以自主增减测试项目;
import unittest
from unittest.runner import TextTestRunner

# 定义一个测试套件
suite = unittest.TestSuite()

# 往测试套件里新增用例类下的所有测试项
suite.addTest(unittest.makeSuite(MathUtilTest))
suite.addTest(unittest.makeSuite(MyTest2))
suite.addTest(unittest.makeSuite(MyTest3))

# 执行测试套件
runner = TextTestRunner()
ret = runner.run(suite)
print(ret)

版权声明:本文为博主原创文章,未经博主允许不得转载.https://my.csdn.net/pangzhaowen

概述

  • 单元测试只是对工程中的代码单元(通常细化到每个函数)进行正确性验证的工作;
  • 对自己写的模块和类进行必要的单元测试,保证严谨正确,既是良好的开发习惯,也是一种规范;
  • Python中的标准库中单元测试的模块是单元测试;
import unittest

单元测试

待测试的工具类

# 待测的工具类
class MathUtil:

    # a,b相加
    def sum(self, a, b):
        return a + b

    # a,b相减
    def sub(self, a, b):
        return a - b

    # 判断a是否大于b
    def gt(self, a, b):
        return a > b

测试用例类,有以下几个要点:

  • 测试用例类必须继承unittest.TestCase生成生成
  • 具体的测试项函数必须以的的testXXX来命名
  • 设置()方法会在每个测试项执行前调用,如有必要的初始化工作可以通过覆写该方法来实现
  • TEARDOWN()方法会在每个测试项结束后调用,如有善后工作可以通过覆写该方法来实现
  • 在具体的测试项函数中,使用的测试用例的assertXXX系列函数预言结果
  • 如果程序执行结果与预测的一致,测该单项测试通过,否则不通过
# 测试用例类,必须继承于unittest.TestCase
class MathUtilTest(unittest.TestCase):
    '''MathUtil工具类测试用例'''

    # 测试项初始化方法
    def setUp(self):
        print("MathUtilTest setUp")
        self.mu = MathUtil()

    # 测试项结束时调用
    def tearDown(self):
        print("MathUtilTest tearDown")

    '''
    一系列的测试方法,都必须以testxxx命名
    '''

    # 测试MathUtil的sum方法
    def testSum(self):
        print("testSum...")

        # 断言相等
        self.assertEqual(self.mu.sum(3, 4), 7)

    # 测试MathUtil的sub方法
    def testSub(self):
        print("testSub...")

        # 断言相等
        self.assertEqual(self.mu.sub(3, 4), -1, "testSub failed!!!")

    # 测试MathUtil的gt方法
    def testGt(self):
        print("testOthers...")

        # 断言真假
        self.assertTrue(self.mu.gt(5, 4))
        self.assertFalse(self.mu.gt(4, 5))

        # 断言抛出异常
        with self.assertRaises(TypeError):
            self.mu.sum(1, "2")

执行单元测试

if __name__ == '__main__':

    # 运行当前模块中的所有测试用例
    unittest.main()

本次测试全部通过 

修改MathUtil的总和()方法,使其逻辑错误,观察这一次的单元测试结果

class MathUtil:
    def sum(self, a, b):
        return a - b

结果下显示testSum这一单项测试失败:AssertionError:-1!= 7结果结果-1与预测值7不相符: 

测试套件

  • unittest.main()方法会执行当前模块中的所有测试用例类中的所有测试项,这显得不太灵活;
  • unittest.TestSuite类是一个测试用例容器,可以按需添加测试用例于其中,使得单元测试既可以批量进行,又可以自主增减测试项目;
import unittest
from unittest.runner import TextTestRunner

# 定义一个测试套件
suite = unittest.TestSuite()

# 往测试套件里新增用例类下的所有测试项
suite.addTest(unittest.makeSuite(MathUtilTest))
suite.addTest(unittest.makeSuite(MyTest2))
suite.addTest(unittest.makeSuite(MyTest3))

# 执行测试套件
runner = TextTestRunner()
ret = runner.run(suite)
print(ret)

猜你喜欢

转载自blog.csdn.net/pangzhaowen/article/details/80910397