Python 单元测试发现
本文将向我们介绍单元测试以及如何针对特定代码段运行它。 我们将学习 discover 命令的用法来自动识别模块名称,以及为什么它在 Python 中可能不起作用。
使用 unittest 模块借助 Python 中的 discover 命令识别测试模块
我们无法触摸、闻到或感觉到软件来确定其质量,但我们可以使用测试工具对其进行测试。 单元测试是实例化应用程序的一小部分并独立于其他部分验证其行为的方法。
换句话说,您将一小部分代码单独放在一个小函数中进行测试。 这部分开发经常被跳过,导致客户对您软件的测试是糟糕的用户体验。
典型的单元测试包含三个阶段:Arrange、Act 和 Assert。
安排为单元测试运行或实例化对象创建适当的条件。 Act 为该对象提供一些输入或数据,Assert 检查输出数据是否符合预期。
让我们创建一个名为 demo.py 的新文件并开始编写代码; 我们将创建两个函数来加减两个数字。 这些函数只能接受整数或浮点数作为参数; 否则,它将抛出 TypeError。
def Add_TWO_NUM(a,b):
return a+b
def SUB_TWO_NUM(a,b):
return a-b
现在,我们将为使用 unittest 的测试创建一个 test_functions.py 文件,因为 unittest 是内置于 Python 发行版中的。 我们不需要做任何事情来安装它; 但是,我们可以在代码中导入 unittest。
我们在这里添加了这个额外的前缀,test_,在我们的文件名前面,它是 functions.py。 这个 test_ 前缀将帮助 unittest 识别这是编写单元测试函数的文件。
首先,如您所见,我们导入了模块 unittest,然后从我们要测试的模块中导入了函数,然后我们初始化了一个名为 TessSomeFunctions 的类。 如果需要编写测试类,则应在编写所有测试函数之前先编写测试类。
由于我们正在测试,这就是为什么在括号中,我们需要给它 unittest.TestCase; 用户定义的类应该派生自 unittest.TestCase。 运行测试是单元测试调用函数的唯一途径; 这是一个单元测试的案例,这个类中的每个函数都将是一个单元测试。
我们可以将其定义为 Python 脚本中的任何其他函数,并编写 def 关键字。 然后名称以测试前缀开头,如 test_,然后是我们可以给它的任何名称。
unittest 模块为我们提供了断言。 您可以使用 unittest 查看 unittest 模块中的所有资产。 或者官方文档上的所有方法。
使用 assertEqual()
方法,我们将检查此函数是否返回 10。 Assertion 表示你想断言函数返回了我们期望的结果 10。
我们提供 4 和 6 作为此 Add_TWO_NUM()
函数的参数。 在 assertEqual()
方法的第二个参数中,我们检查它是否相等。
我们还将测试另一个名为 test_SUB_TWO_NUM()
的函数,过程是相同的,但是在这个函数中,我们正在测试一个将两个数字相减的函数。 现在我们需要进入文件并写入一行 if __name__=='__main__'
并使用命令 unittest.main()
运行单元测试。
import unittest
from demo import Add_TWO_NUM,SUB_TWO_NUM
class TesstSomeFunctions(unittest.TestCase):
def test_Add_TWO_NUM(self):
self.assertEqual(Add_TWO_NUM(4,6),10)
def test_SUB_TWO_NUM(self):
self.assertEqual(SUB_TWO_NUM(5,3),2)
if __name__=='__main__':
unittest.main()
现在这两个测试用例已经准备就绪,让我们运行 Python 文件。 如您所见,它为我们提供了有关在 0.0 秒内运行的两个测试的信息。
这两个点代表通过的测试。 如果测试没有通过,您会看到一个大写的 F。
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
如果您不想将文件中的测试模块作为模块运行怎么办? 好吧,您可以通过在终端中键入命令来做到这一点。
python -m unittest test_functions.py
这个命令完全一样。
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
如果你想要更多的信息,你可以放 v-,这意味着详细,给你更多关于每个单元测试的细节。 它会告诉您哪个测试是最好的。
python -m unittest -v test_functions.py
输出:
test_Add_TWO_NUM (test_functions.TesstSomeFunctions) ... ok
test_SUB_TWO_NUM (test_functions.TesstSomeFunctions) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.002s
OK
还有第三个选项可以从终端运行单元测试,discover。 此命令将自动发现所有以测试开头的模块,因此我们不需要单独传递模块名称。
这就是为什么必须从测试开始命名所有模块的原因。
python -m unittest discover
输出:
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
如果测试文件名不是以 test 开头,那么 discover 命令将不会返回任何内容,因为它会将其识别为普通的 Python 文件或模块。 有关 unittest 模块的更多信息,您可以访问 python.org。
相关文章
Python 中的参数化单元测试
发布时间:2023/06/22 浏览次数:80 分类:Python
-
在 Python 中,我们可以使用参数化单元测试为每个项目或测试用例生成一个测试。 本文将探讨 Python 的参数化单元测试。Python 中参数化单元测试的目的 当开发人员编写单元测试时,他们通常采
Python Unittest 和 Pytest
发布时间:2023/06/22 浏览次数:105 分类:Python
-
这篇文章的主要目的是讨论Python中两个最常用的单元测试框架unittest和pytest,它们的优缺点以及在何时选择哪个框架。
Python 模拟类属性
发布时间:2023/06/22 浏览次数:161 分类:Python
-
本文的主要目的是演示如何使用 python 单元测试模块 unittest 操作类属性以进行测试和调试。模拟类属性的原因
Python 单元测试设置
发布时间:2023/06/22 浏览次数:127 分类:Python
-
在本文中,我们将讨论什么是单元测试和 Python 单元测试框架。 我们还讨论了如何使用 setUp() 函数进行单元测试以及示例。
Python rsync 同步
发布时间:2023/06/22 浏览次数:129 分类:Python
-
本文将探讨 rsync 以及我们如何从 Python 脚本中使用它。Python同步如上所述,rsync 是一个强大的工具
Python Deque Peek 介绍
发布时间:2023/06/22 浏览次数:198 分类:Python
-
本文演示了如何在 Python 中查看/检查双端队列(双端队列)前面的元素,而无需将它们从双端队列中删除。Python Deque Peek 概述
Python 中的异步请求
发布时间:2023/06/22 浏览次数:74 分类:Python
-
今天我们来学习一下异步请求; 这个讨论将引出代码示例,看看我们如何在 Python 中编写异步请求。Python 中的异步请求
Python - 等待异步函数完成
发布时间:2023/06/22 浏览次数:163 分类:Python
-
本文介绍如何创建异步函数并使用await 关键字中断进程。 我们还将学习如何在 Python 中使用任务而不是线程。
在 Python 中列出虚拟环境
发布时间:2023/06/21 浏览次数:149 分类:Python
-
在本文中,我们将讨论什么是 Python 中的虚拟环境以及列出它们的一些命令。虚拟环境是一个独立的环境,我们可以在其中安装库、包、脚本和Python解释器。