其他分享
首页 > 其他分享> > 使用 unittest 框架对 Python 代码进行单元测试

使用 unittest 框架对 Python 代码进行单元测试

作者:互联网

单元测试是软件开发的重要组成部分,因为它隔离软件程序或系统的不同组件,并检查其运行方式是否正确。它确保代码符合质量标准,并且系统中的缺陷或错误可以正确地追溯到失败的隔离代码单元,并及时纠正故障。

我的静态站点生成器 -rwar随着时间的推移不断发展并变得更好,这意味着我需要确保代码是专业和高质量的!此外,能够使用测试框架并很好地学习它们可以帮助您在面试中脱颖而出。

学习曲线 

到目前为止,我不习惯为我从事的个人项目和小组项目编写测试,这就是为什么从测试驱动的角度思考代码对我来说具有挑战性。我能感觉到我的神经元在放电,因为我正在努力思考如何将所有的单元测试片段放在一起。到目前为止,我只有一点点使用JavaScript和Java测试框架的经验,所以我必须经历一个很大的学习曲线来理解框架。这个解释对于我了解什么是 unittest以及如何开始使用它非常有用。我曾经低估了阅读文档的重要性,但现在我知道这项技能是多么重要。JestJunitunittest

为什么框架unittest

在对一些最流行的 Python 测试框架进行一些研究时,我遇到了,并且。它们都是很棒的工具,但是,我决定尝试这个项目,因为 unittest 的灵感来自我之前有一些经验。尝试和学习不同的框架以最终找出我们最喜欢的框架总是好的。我将为我的下一个Python项目进行尝试。每个测试框架都有其命名文件和结构化代码的约定,这是查看示例并浏览所选框架的文档的另一个重要原因。pytestnoseunittestunittestJUnitpytest

有一个好的测试计划 

在开始之前有一个好的测试计划非常重要。

1) 了解你的代码做了什么

2)好的和坏的测试场景

3) 什么不需要测试

4) 编写测试

过程 

对于我的项目,我在文件夹下创建了两个测试文件 - 和。test_parser.pytest_ssg.pytest

如本文档所述:

unittest要求:

  • 将测试作为方法放入类中
  • 在类中使用一系列特殊的断言方法,而不是内置语句unittest.TestCaseassert

1)要开始使用unittest,我首先必须:

import unittest

2)然后,我创建了一个从该类继承的类,它旨在测试我的SSGTestTestCaseclass SSG

class SSGTest(unittest.TestCase):

同样,我已经为我的另一个test_parser.py文件执行此操作。

class CLIParser(unittest.TestCase):

举个例子:

很难回顾我为我的项目编写的所有测试,因为有很多!但是,
这里有一个例子。请注意,我如何在测试中使用描述性名称。在这里,我正在检查测试是否有任何输入文件。
test_parser.py

class CLIParser(unittest.TestCase):

def test_without_input(self):

with self.assertRaises(SystemExit) as err:

get_parser_args([])

self.assertEqual(err.exception.code, 2, "No input directory provided")

assertRaises()验证是否引发特定异常。

with self.assertRaises(SomeException):
    do_something()

assertEqual()检查预期结果。

with self.assertRaises(SomeException) as cm:
    do_something()

the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)

何时使用 setUp() 和 tearDown() 

如果你浏览我的代码,你会发现我使用了 theand方法。对于test_ssg.py中的每个测试,都会创建一个临时文件,该文件需要在测试后删除,这是我可以使用setUp()和tearDown()完成的。这些是重复的过程,我可以使用这些方法简化。想象一下,您有一个包含 10 个测试的套件,其中 7 个需要相同的设置/拆卸代码,而 3 个不需要,并为您提供了一种重构代码的好方法。当我们需要创建用于测试目的或模拟目的的假数据库时,通常会使用它。

标签:unittest,框架,Python,代码,测试,组成,部分,软件,程序,系统
来源: