什么是 Python 单元测试?
什么是单元测试?
单元测试是一种软件测试类型,其中测试系统的每个独立组件。单元测试是开发人员的重要实践。它确保软件的每个组件都能按预期正常运行。单元测试主要由开发人员在软件开发的编码阶段执行。
单元测试使解决问题变得容易,因为开发人员可以知道系统或软件的哪个特定组件存在问题,并且开发人员可以修复该特定单元。
Python 单元测试
Python 拥有一个名为 **unittest** 的内置包,用于执行单元测试。单元测试使代码具有未来兼容性,因为开发人员会预测代码可能失败的可能情况,并针对这些情况测试代码。即使我们可能会错过某些情况,但仍然会解决大多数情况,并且代码将针对这些情况进行测试。
可以通过以下方式在 Python 程序中导入此模块来使用 unittest 模块。
import unittest
示例
假设我们有一个简单的函数,它计算正方形的面积。将此文件保存为名为“area.py”的文件。
def area(a): return (a+a)
现在,让我们为上述函数编写单元测试代码,这将让我们知道我们的函数是否给出了预期的输出。将单元测试代码文件保存为名为“unit_test.py”的文件。
**unit_test.py** &mnus;
from area import * import unittest class Testarea(unittest.TestCase): def test_area(self): self.assertAlmostEqual(area(5),25) self.assertAlmostEqual(area(3),9) self.assertAlmostEqual(area(4),16)
在这里,导入了包含要测试的代码的文件。使用了 unittest 方法 **assertAlmostEqual()**。这将使用一些输入调用 area 函数,第二个参数包含函数要返回的预期输出。如果 area() 返回的输出等于预期输出,则测试通过,否则测试失败。
现在让我们从命令提示符运行 unit_test.py 以检查我们的 area() 代码是否通过测试。
从命令提示符执行以下命令以运行 unit_test 文件。
python -m unittest unit_test.py
输出
C:\Users\Inderjit Singh\Desktop>python -m unittest unit_test.py F ====================================================================== FAIL: test_area (unit_test.Testarea) ---------------------------------------------------------------------- Traceback (most recent call last): File "C:\Users\Inderjit Singh\Desktop\unit_test.py", line 7, in test_area self.assertAlmostEqual(area(5),25) AssertionError: 10 != 25 within 7 places (15 difference) ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (failures=1)
我们的代码单元测试失败了。原因在回溯中给出。第一个函数 self.assertAlmostEqual(area(5),25) 导致我们的代码失败。因为函数返回 10,但预期输出是 25。
由于这是一个简单的函数,我们知道如何修复它。我们的 area() 代码是错误的。它应该返回 (a*a) 而不是 (a+a)。
让我们修复 area() 代码并重新运行单元测试。
def area(a): return (a*a)
重新运行 unit_test.py
C:\Users\Inderjit Singh\Desktop>python -m unittest unit_test.py . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
现在,由于我们已在 area() 中更正了代码,因此它成功运行并显示 OK 状态。这确保了我们的代码针对 unit_test.py 文件中指定的所有情况都能完美运行。
这是一个非常简单的想法,旨在提供有关单元测试的概念。unittest 模块中还有许多其他函数在开发过程中用于单元测试。