Javatpoint标志
Javatpoint标志

Unittest和Doctest的区别

在本教程中,我们将讨论doctest和unittest之间的区别,并看到一些情况。测试是软件开发的一个重要阶段,它有助于识别错误、敏捷代码和代码可重用性。用几个测试用例对代码库进行测试,以防止破坏并最大限度地减少漏洞暴露。Python提供了两个主要的测试框架,doctest和unittest。让我们熟悉一下这两个框架。

Doctest简介

Doctest是一个内置框架,这意味着它是随Python安装一起提供的,或者我们不需要单独安装它。doctest模块用于识别和执行模拟交互式Python会话的代码片段,并进行测试以确保结果与所描述的预期输出匹配。doctest最常用于测试文档。它检查文档字符串中的语句序列,重新执行提取的命令,并将其与文档字符串中的命令行输入进行比较。默认情况下,在使用doctest模块时,当测试用例通过时不显示输出。但是,可以使用doctest运行程序中的选项更改此行为。此外,doctest与Python unittest框架的兼容性允许我们将doctest作为常规的unittest测试用例来执行。如果您想了解更多关于doctest模块的信息,可以查看我们的Python Doctest模块教程。

Unittest简介

unittest中的测试运行器在执行测试用例时提供了额外的选项,包括生成结果统计报告的能力,包括已经通过和失败的测试用例的数量。在unittest中,类中创建的方法管理测试。它支持测试时的设置、自动化和关闭代码。它带有各种内置的、丰富的功能,包括doctest中没有包含的生成器和组fixture管理器。

由于unittest遵循面向对象的方法,因此它更适合在非生产环境中测试基于类的方法。另一方面,像Jenkins或Travis CI这样的持续交付工具更适合于生产环境。在接下来的小节中,我们将演示一个真实的代码示例,该代码处理员工信息及其对工资的影响,并使用doctest和unittest对其进行测试。在进行测试后,我们将评估结果,并提出进一步加强测试过程的方法。

代码示例-使用Unittest

让我们实现Employee类,并使用unittest创建一些测试方法。让我们看看下面的代码。

的例子,

在上面的代码中,我们从Python包中导入unittest并导入Employee类。在TestEmployee类中,我们使用unittest中的“TestCase”,因为它允许我们验证每组输入的特定输出。然后,我们使用以“test”前缀开头的方法设计三个独立的测试。“test”前缀向测试运行程序发出信号,以确定将哪些方法作为测试运行。

test_employee.py

在上面的代码中,我们从Python包中导入unittest并导入Employee类。在TestEmployee类中,我们使用unittest中的“TestCase”,因为它为我们提供了验证每组输入的特定输出的能力。然后,我们使用以“test”前缀开头的方法设计三个独立的测试。“test”前缀向测试运行程序发出信号,以确定将哪些方法作为测试运行。

设置()方法在任何其他测试方法之前执行,并且它是我们创建客户实例的地方。我们使用assertEqual ()方法将每个测试方法中的预期结果与实际结果进行比较。当我们运行上面的测试时,我们得到以下结果。

...---------------------------------------------------------------------- 跑3测试在0.001 s OK

如果我们改变预期输出,我们将看到以下结果。

C:\Users\User\Desktop\my_project\unittest>python test_employee.py====================================================================== 失败:test_apply_epf (__main__.TestEmployee ) ---------------------------------------------------------------------- 回溯(最近调用最后):文件“test_employee.py”,22日在test_apply_epf self.assertEqual (self.employee_1。工资,47500)AssertionError: 475000 ! = 47500  ---------------------------------------------------------------------- 在0.001秒跑3测试失败(失败= 1)

这种类型的测试允许快速识别错误,并帮助确定错误发生在代码中的哪个位置。通过使用包含所有可能场景的unittest和制作测试,我们可以增强程序的清晰度、功能和逻辑流。

使用Doctest

与unittest相比,使用doctest更简单,需要的步骤更少。尽管它易于使用,但在使用doctest时还是要谨慎,因为它有一定的局限性。

现在让我们使用doctest演示前面的示例。

的例子,

现在,我们将在终端中执行以下操作。

我们运行Python doctest_employee -v命令,并返回以下输出。

输出-

尝试:employee_1 =员工(“约翰”,“布拉德”,5000)期待没有什么好尝试:employee_2 =员工(“蒂娜”,“史密斯”,3000)期待没有什么好尝试:employee_1.employee_mail()期待:'(电子邮件保护)' ok Trying: employee_2.employee_mail() expected: '(电子邮件保护)' ok尝试:employee_1.employee_fullname()期待:'约翰布拉德' ok尝试:employee_2.employee_fullname()期待:'蒂娜史密斯' ok尝试:employee_1.apply_epf()期待:4750 ok尝试:employee_2.apply_epf()期待:2850 ok 5个项目没有测试:__main__ __main__.employee。__init__ __main__.employee。apply_epf __main__.employee。employee_fullname __main__.employee。Employee_mail 1项通过了所有测试:__main__中的8项测试。员工8测试6个项目。8个通过,0个不通过。测试通过。

正如我们在上面的输出中看到的,所有测试都通过了。doctest使得编写包的可执行文档变得更容易,也更适合,而unittest更适合测试文档。

结论

本教程包括doctest和unittest之间的区别。unittest框架为测试代码提供了一种面向对象的方法,包括自动化、设置和删除测试代码等特性。另一方面,doctest更适合用于文档,因为它可以嵌入到代码的文档字符串中。







Youtube 观看视频请加入我们的Youtube频道:现在加入

反馈


帮助他人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


B.Tech / MCA






Baidu
map