《Python编程 从入门到实战》学习笔记1——测试代码

目录

1 安装 pytest

2 测试函数

2.1 被测函数

2.2 单元测试和测试用例的概念        

2.3 可通过的测试

2.4 未通过的测试

3 测试类

3.1 测试中常用的断言语句

3.2 要被测试的类

3.3 测试 AnonymousSurvey 类

3.4 使用夹具


        在编写函数或类时,可以为其编写一个测试代码。通过测试,可确定代码面对各种输入是否都能按要求工作。测试成功会让你艰辛,无论有多少人使用你的程序,它都能正确地工作。在程序中添加新代码时,也可以对其进行测试,确认它们不会破坏程序既有的行为。

1 安装 pytest

# 在安装 pytest 库前,最好先更新一下 pip 库
python -m pip install --upgrade pip
# 安装 pytest 库
python -m pip install pytest

2 测试函数

2.1 被测函数

        在编写测试函数前,必须的有被测试的代码。所以,下面先编写了一个简单的函数,它接受两个参数——名和姓,并返回格式规范的姓名:

def get_formatted_name(first, last):
    full_name = f'{first} {last}'
    return full_name.title()

2.2 单元测试和测试用例的概念        

        软件测试方法多种多样。一种最简单的测试时单元测试(unit test),用于核实函数的某个方面没有问题。测试用例(test case)是一组单元测试,这些单元测试一起核实函数在各种情况下的行为都符合要求。全覆盖(full coverage)测试用例包含一整套单元测试,涵盖了各种可能的函数使用方式。对于达性项目来说。要进行全覆盖测试可能很难。通常,最初只要针对代码的重要行为编写测试即可,等项目被广泛使用后在考虑全覆盖测试。

2.3 可通过的测试

        使用 pytest 进行测试会让单元测试编写起来非常简单。我们将编写一个测试函数,它会调用要测试的函数,并做出有关返回值的断言。如果断言正确,表示测试通过;否则表示测试未通过。

        编写测试文件时要注意,测试文件的名称必须以 test_ 开头。当 pytest 运行测试时,它将查找以 test_ 开头的文件,并运行其中的所有测试。

        下面针对上面的函数 get_formatted_name() 编写一个测试,文件名为 test_name_function.py

# 引入 get_formatted_name 函数,name_function 为其所在的文件名
from name_function import get_formatted_name

# 定义一个单元测试函数,必须以 test_ 开头
def test_first_last_name():
    formatted_name = get_formatted_name('janis', 'joplin')
    assert formatted_name == 'Janis Joplin'
'''
这个测试函数名的长度比较长的原因有二:
    1)测试函数必须以 test_ 开头。在测试过程中,pytest 会找出并运行所有以 test_ 开头
的函数
    2)测试函数名应该比典型的函数名更长、更具描述性。你自己不会调用测试函数,而是由 
pytest 替你查找并运行它们。因此,测试函数名应足够长,让你在测试报告中看到它们时,能清楚地
知道它们测试的是什么。

在调用被测试的函数 get_formatted_name() 时,向它传递了实参 ‘janis' 和 'joplin',并
将函数的返回值赋值给变量 formatted_name
最后,使用 assert(断言,用来声称满足特定的条件)语句,声称 formatted_name 的值为
’Janis Joplin‘
'''

'''
============================= test session starts =============================
collecting ... collected 1 item

test_name_function.py::test_first_last_name PASSED                       [100%]

============================== 1 passed in 0.01s ==============================
'''
'''
(本程序的运行环境为 Windows 10 + Pycharm)
运行该测试函数,将会得到上面的输出,接下来就对这个输出进行解读。
首先,test session starts 表示下面为 pytest 测试部分的信息
collecting ... collected 1 item 表示 pytest 找到了一个测试
test_name_function.py::test_first_last_name PASSED                       [100%] 
指出了运行的是哪个测试文件的测试函数,函数名后面的 PASSED 表示该测试通过了,而 100% 指出运
行了所有的测试。
1 passed in 0.01s 指出有一个测试通过了,运行该测试花费的时间为 0.01 妙。 

上述输出表明,在给定包含名和姓的姓名时,get_formatted_name() 函数总能正确地处理。
'''

2.4 未通过的测试

        那么,测试未通过时会输出什么呢?现在修改一下上面的 get_formatted_name(),让其能处理中间名,但同时故意让该函数无法正确地处理像 Janis Joplin 这样只有名和姓的姓名。

def get_formatted_name(first, middle, last):
    full_name = f'{first} {middle} {last}'
    return full
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值