2022年4月28日:通过Python构建真实的应用程序 --开始使用Python进行测试(理论没看懂)

测试是专业工程的核心做法。 对于开发可靠的软件而言,充分掌握测试并利用其优势至关重要。

从 unittest(Python 的标准库模块)到不同类型的测试以及何时应用这些技术。

使用unittest模块了解Python测试

Python 在其标准库中有一个名为 unittest 的测试模块。在标准库中意味着该模块包含在 Python 中,因此无需安装任何项即可使用它。

通常会看到导入 unittest 的测试文件和使用该库来实现测试的测试类。

类和继承是使用 unittest 编写测试的基础。 因此,不能编写不使用来自 unittest 的基类的测试函数或其他测试。

使用unittest编写测试

使用 unittest 编写测试需要导入模块并创建至少一个从 unittest.TestCase 类继承的类。

运行测试

使用 unittest 模块运行测试的另一种方法是,将其与 Python 可执行文件一起使用。

运行失败。 

命名约定

类和方法名称遵循测试约定。 约定是它们需要以 test 作为前缀。 虽然这不是必需的,但测试类使用驼峰式大小写,而测试方法采用小写,单词用下划线分隔。

class TestAccounts(unittest.TestCase):

    def test_creation(self):
        self.assertTrue(account.create())

    def test_deletion(self):
        self.assertTrue(account.delete())

断言和断言方法

必须使用断言方法(而不是 Python 的内置 assert() 函数)在发生故障时提供丰富的报告。 test_assertion.py 使用 self.assertEqual()(unittest.TestCase 类中的许多特殊方法之一)确保两个值相等。

self.assertEqual("one string", "one string")

在本例中,这两个字符串相等,因此测试通过。

测试相等性是 unittest.TestCase 类提供的许多不同断言之一。 虽然断言方法超过 30 种,但除了 self.assertEqual() 之外,以下方法最为常用:

self.assertTrue(value):确保 value 为 true。

self.assertFalse(value):确保 value 为 false。

self.assertNotEqual(a, b):检查 a 和 b 是否不相等。

故障和报告

通过测试是确保可靠性的好方法。 但是,对于更新和修复生产代码,了解故障报告仍然至关重要。

使用unittest模块编写单元测试

步骤1-为此练习添加文件

使用测试文件的 Python 文件名约定创建一个新的测试文件。 将测试文件命名为 test_exercise.py 并添加以下代码:

输出指出 test_yes_is_true() 测试失败。 它使用 'Yes' 作为 str_to_bool() 函数的输入,该函数不属于 true_vals 列表。 由于该函数没有将 'Yes' 视为任何值的一部分,因此它最终返回一个隐式 None,这就是错误状态为 None is not true 的原因。

步骤2-运行测试并确定失败

现在错误指向大写的 'Yes' 字符串输入,需要修复该 bug。 尽管可以更新测试以使用小写单词 ('yes') 使其通过,但修复程序将使该函数适用于任何大小写。 这意味着以下选项中的任何一个都应该起作用:YES、YeS、yES、yes、yeS、Y、y。

更新 str_to_bool() 函数,以使用 value.lower() 将 value 变量重新分配为小写。

步骤3-修复bug并使测试通过

更新函数,以便在使用非字符串值时引发 AttributeError。

在测试类中使用来自 unittest.TestCase 的新断言方法。 此新测试应验证是否对非字符串输入引发了 AttributeError。

步骤4-通过测试添加新代码

检查你的工作

此时,你应该有一个名称类似于 test_exercise.py 的 Python 测试文件,其中包含以下内容:

  • str_to_bool() 函数
  • 用于捕获 AtributeError 的 str_to_bool() 函数中的 try/except 块
  • 从 unittest.TestCase 继承的 TestStrToBool() 测试类
  • 至少三种测试方法,用于测试 str_to_bool() 函数的输入

在终端中运行测试时,所有测试均应通过。

测试时遇到的挑战

在软件项目中,测试可能比较复杂,而且十分困难。 如果现有项目不是用很多测试生成的,则代码往往非常复杂且不可靠。 对于成功的软件项目,通过测试来了解这些问题和潜在的缺陷至关重要。

缺少测试

旧式代码

缓慢且不可靠的测试

缺少自动化

测试工具

以上没看懂。

测试类型以及如何使用它们

单元测试

集成测试

功能测试

持续集成

由事件触发

按计划运行

手动触发

以上没看懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值