Python测试代码

本文介绍了Python中的单元测试和测试用例,通过一个`get_formatted_name`函数的例子展示了如何编写和运行测试。讲解了unittest模块的使用,包括`TestCase`类、断言方法如`assertEqual`,以及如何实现全覆盖的测试用例。通过测试用例`test_first_last_name`确保函数能正确格式化姓名。最后,展示了成功运行测试后的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 name_function.py

def get_formatted_name(first,last):
    """生成整洁的姓名。"""
    full_name = f"{first} {last}"
    return full_name.title()

 用names.py进行测试

from name_function import get_formatted_name
print("Enter 'q' at any time to quit.")
while True:
    first = input("\nPlease give me a first name: ")
    if first == 'q':
        break
    last = input("\nPlease give me a last name: ")
    if last == 'q':
        break

    formatted_name = get_formatted_name(first,last)
    print(f"\tNeatly formatted name:{formatted_name}")

单元测试和测试用例

        Python 标准库中的模块unittest提供了代码测试工具。单元测试用于核实函数的某个方面没有问题。测试用例是一组单元测试,它们一道核实函数在各种情形下的行为都符合要求。良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试。全覆盖的测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。

        要为函数编写测试用例,可先导入模块unittest和要测试的函数,再创建一个继承unittest,TestCase的类,并编写一系列方法对函数行为的不同方面进行测试。

import unittest
from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):
    """测试name_function.py"""
    def test_first_last_name(self):
        """能够正确地处理像Janis Joplin这样的姓名吗?"""
        formatted_name = get_formatted_name('janis','joplin')
        self.assertEqual(formatted_name,'Janis Joplin')
if __name__ == '__main__':
    unittest.main()

        首先,导入了模块unittest和要测试的函数get_formatted_name()。创建了一个名NamesTestCase的类,用于包含一系列针对的get_formatted_name()的单元测试。这个类可以随命名,但最好让它看起来与要测试的函数相关并包含Test字样。这个类必须继承unittest.TestCase类,这样Python才知道如何运行你编写的测试。
        NamesTestCase 只包含一个方法,用于测试get_formatted_name()的一个方面。将该方法命名为test_first_last_name(),因为要核实的是只有名和姓的姓名能否被正确格式化。运行test_name_function.py时,所有以test_打头的方法都将自动运行。在这个方法中,调用了要测过的函数。在本例中,使用实参'janis'和'joplin'调用 get_formatted_name(),并将结果赋给变量formatted_name。
       使用了 unittest类最有用的功能之一:断言方法。断言方法核实得到的结果是否与期望的结果一致。在这里,我们知道 get_formatted_name()应返回名和姓首字母大写且之间有一个空格的姓名,因此期望 formatted_name的值为Janis Joplin。为检查是否确实如此,我们语用unittest的方法assertEqual(),并向它传递formatted_name和'Janis Joplin'。代码行

self.assertEqual(formatted_name, 'Janis Joplin')

的意思是:“将formatted_name的值与字符串‘Janis Joplin'比较。如果它们相等,那么万事大吉;如果它们不相等,就告诉我一声!”
        我们将直接运行这个文件,但需要指出的是,很多测试框架都会先导入测试文件再运行。导人文件时,解释器将在导入的同时执行它。if代码块检查特殊变量__name__,这个变量是在程序执行时设置的。如果这个文件作为主程序执行,变量__name__将被设置为’__main__。在这里,调用unittest.main()来运行测试用例。如果这个文件被测试框架导入,变量__name__的值将不是‘__main__’,因此不会调用unittest.main()。

        测试结果如下:

Ran 1 test in 0.003s

OK

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值