测试您的代码是软件开发生命周期的重要组成部分,它应该始终在将应用程序部署到生产之前进行。测试至关重要,因为它有助于跟踪和发现代码中的错误。
测试是一种在将代码交付生产之前检查各个源代码单元以确认其工作最佳的方法。需要注意的是,在单元测试期间,无需为用户将源文件部署到生产环境中。
如果您还记得测试不是特定于 Python 的,那将是最好的。
本文将教您如何使用 Python 单元测试编写基本测试,以检查您的代码在测试过程中是通过还是失败。
要完成本教程,您需要以下内容:
编写测试是程序员为测试代码库而编写的逻辑程序。在开发过程中,QA 应该了解流程,在将产品交付给用户之前突出应用程序中需要改进的地方。为此,让我们编写一个将两个数字相加并返回结果的函数。
首先,创建一个文件夹,其中包含用于编写本教程中的测试的所有文件。添加一个名为main.py
的文件以在这个新文件夹中编写函数。
# main.py # Add the sum of two numbers def add_sum(num1, num2): return int(num1) + int(num2)
现在我们有了上面的代码块,让我们通过编写一个允许用户通过输入提示输入所需值的函数来检查代码是否有效。函数add_sum()
将两个数字作为参数,并使用运算符+符号返回值以获得总和。在另一个文件result.py
中,复制并粘贴以下代码:
# result.py from main import add_sum print("Please enter the two values\n") num1 = int(input("Please enter the first number: \n")) num2 = int(input("Please enter the second number: \n")) total = add_sum(num1, num2) print(f"The sum of the values is {total}")
此代码块执行以下操作:
main.py
导入add_sum()
int
方法将输入提示值转换为整数
Python 带有一个名为 unittest 的内置标准库模块,它提供了为您的代码构建和运行测试的工具。单元测试的主要目的是检查所有代码功能是否按预期执行。
测试用例是使用单元测试的标准方式,其功能在测试名称类中可用。此外,对于单个单元测试,测试用例在组件代码中是必不可少的。它使用不同的断言方法在运行代码后立即检查和报告故障。
本节是关于编写一系列测试的。
在创建用于编写add_sum()
函数的所有测试用例的测试文件之前,让我们更新main.py
。复制并粘贴以下代码:
# main.py def add_sum(num1, num2): try: return int(num1) + int(num2) except ValueError as err: return err
代码块使用try/except
语句来处理代码中的异常,如果 except 块中存在错误,则会向您发出警报。编程中的这种方法有助于捕获错误并将您指向发生错误的特定行号。
现在,在名为 test.py 的同一目录中创建一个测试文件。在此文件中,复制并粘贴以下代码:
# test.py import unittest from main import add_sum class MainTest(unittest.TestCase): def test_do_stuff(self): result = add_sum(5, 10) self.assertEqual(result, 15) if __name__ == '__main__': unittest.main()
如上面的代码块所示,会发生以下情况:
当 test.py 自动运行时,请记住以“test_”开始每个方法。 **
**
每当您运行测试时,所有检查都应通过控制台中的 OK 消息,这意味着它是成功的。
Ran 1 test in 0.000s OK
在开发和测试过程中,应该有失败的场景。这样做表明每个程序都有漏洞和错误。
在同一个文件test.py
中,让我们修改代码并粘贴以下内容:
# test.py import unittest from main import add_sum class MainTest(unittest.TestCase): # other test def test_do_stuff2(self): result = add_sum("hulu", 5) self.assertEqual(result, 5) if __name__ == '__main__': unittest.main()
运行此代码的结果如下所示:
FAIL: test_do_stuff2 (__main__.MainTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "test.py", line 11, in test_do_stuff3 self.assertEqual(result, 5) AssertionError: ValueError("invalid literal for int() with base 10: 'hulu'") != 5
从上面的输出中,可以通过读取错误代码并相应地更正代码来解决以下问题:
当您创建了许多文件和不同的模块,并且您需要同时测试所有这些而不是默认尝试单个文件时,您可以使用此命令同时运行所有测试。
python3 -m unittest
此外,要获取有关测试的更多详细信息,请使用带有标志-v (详细)的命令,它会向您显示正常的测试和失败的测试。
python3 -m unittest -v
结果如下所示:
test_do_stuff (test.MainTest) ... ok test_do_stuff2 (test.MainTest) ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK
每当在用户使用应用程序之前发布新功能时,单元测试应该由参与编写和交付代码的 QA 和开发人员进行。定期或定期进行测试不应该是事后的想法,而是要建立对应用程序的功能和效率的信任。
本文概述了为什么测试在开发中必不可少,以及如何使用单元测试来检查代码功能并在部署到生产之前满足用户的标准规范。