详解Python单元测试的两种写法

 更新时间:2022年07月07日 10:51:33   作者:什么都干的派森  
python的两个单元测试包分别是 doctest 和 unittest,这两个包的使用起来各有长处,适用于不同的场景,这篇文章主要介绍了Python单元测试的两种写法,需要的朋友可以参考下

一、前言

python的两个单元测试包分别是 doctest 和 unittest,这两个包的使用起来各有长处,适用于不同的场景

  • doctest:直接写在方法体中,利用了 python 动态语言的特性,书写方式简单明了,前提是项目不要太大,如果项目复杂代码量大,再加上写在方法体中的单元测试,整体就会看起来有些臃肿,因此 doctest 适用于代码量不大的普通项目
  • unittest:一般写在独立文件中,与 spring 的单元测试有点像,项目结构清晰,不过简单项目中测试一些小功能的话实属dark不必了

二、实现

先写一个待测试的方法

def add(num1, num2):
    return num1 + num2

1.doctest

def add(num1, num2):
    """
    直接写在待测方法中
    
    >>> add(14, 5)
    19
    >>> add(14, 5) > 1
    True
    
    >>> add(20, 30, 70)
    Traceback (most recent call last):
        ...
    TypeError: add() takes 2 positional arguments but 3 were given
    """
    return num1 + num2
if __name__ == "__main__":
    import doctest
    doctest.testmod()

运行上面的代码什么都不会输出,因为预测结果全部正确,只有在预测结果错误的时候才会给提示
ps:

  • add(14, 5) 为测试方法,19 为预测结果
  • add(14, 5) > 1 为测试方法,True 为预测结果
  • add(20, 30, 70) 为测试方法,Traceback (most recent call last): 为异常抛出的第一句话【错误原因】,TypeError: add() takes 2 positional arguments but 3 were given 为异常抛出的最后一句话【异常类型:解释说明】,中间三个点省略了异常中的文件路径信息

2.unittest

import unittest
# 引入上面的待测试方法
from src.main.add import add
class TestStatisticalFunctions(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(14, 5), 19)            # 断言 add(14, 5) 的结果为 19
        self.assertTrue(add(14, 5) > 1, True)       # 断言 add(14, 5) > 1 的结果为 True
        with self.assertRaises(TypeError):          # 断言 add(20, 30, 70) 抛出 TypeError 异常
            add(20, 30, 70)
if __name__ == '__main__':
    unittest.main()

同样,运行上面的代码什么都不会输出,因为预测结果全部正确,只有在预测结果错误的时候才会给提示

到此这篇关于Python单元测试的两种写法的文章就介绍到这了,更多相关Python单元测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对Tensorflow中tensorboard日志的生成与显示详解

    对Tensorflow中tensorboard日志的生成与显示详解

    今天小编就为大家分享一篇对Tensorflow中tensorboard日志的生成与显示详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python函数的参数常见分类与用法实例详解

    Python函数的参数常见分类与用法实例详解

    这篇文章主要介绍了Python函数的参数常见分类与用法,结合实例形式较为详细的分析了Python函数的形参、实参、默认参数、可变参数等概念、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-03-03
  • R语言 vs Python对比:数据分析哪家强?

    R语言 vs Python对比:数据分析哪家强?

    R语言和Python在数据分析方法都各有所长,两者现在可以说是都非常热门的,那么这篇文章就来给大家总结介绍关于R语言和Python数据分析的相关资料,并给大家推荐了一些相关的书籍学习,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2017-11-11
  • python基础之//、/与%的区别详解

    python基础之//、/与%的区别详解

    在学习Python或者使用Python进行工作的时候,大家应该都看到过“/”和“//”,下面这篇文章主要给大家介绍了关于python基础之//、/与%区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Python itertools模块详解

    Python itertools模块详解

    这篇文章主要介绍了Python itertools模块详解,本文基本是基于文档的翻译和补充,相当于翻译了,需要的朋友可以参考下
    2015-05-05
  • python3 实现验证码图片切割的方法

    python3 实现验证码图片切割的方法

    今天小编就为大家分享一篇python3 实现验证码图片切割的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python reflect单例模式反射各个函数

    Python reflect单例模式反射各个函数

    这篇文章主要介绍了Python reflect单例模式反射各个函数,文章围绕主题展开详细的内容介绍,具有一定的参考价值需要的小伙伴可以参考一下
    2022-06-06
  • Python基于机器学习方法实现的电影推荐系统实例详解

    Python基于机器学习方法实现的电影推荐系统实例详解

    这篇文章主要介绍了Python基于机器学习方法实现的电影推荐系统,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • tensorflow构建BP神经网络的方法

    tensorflow构建BP神经网络的方法

    这篇文章主要为大家详细介绍了tensorflow构建BP神经网络的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python tornado微信开发入门代码

    python tornado微信开发入门代码

    这篇文章主要为大家详细介绍了python tornado微信开发入门代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论