单元测试是软件开发的重要组成部分,因为它隔离软件程序或系统的不同组件,并检查其运行方式是否正确。它确保代码符合质量标准,并且系统中的缺陷或错误可以正确地追溯到失败的隔离代码单元,并及时纠正故障。
我的静态站点生成器 –rwar随着时间的推移不断发展并变得更好,这意味着我需要确保代码是专业和高质量的!此外,能够使用测试框架并很好地学习它们可以帮助您在面试中脱颖而出。
学习曲线
到目前为止,我不习惯为我从事的个人项目和小组项目编写测试,这就是为什么从测试驱动的角度思考代码对我来说具有挑战性。我能感觉到我的神经元在放电,因为我正在努力思考如何将所有的单元测试片段放在一起。到目前为止,我只有一点点使用JavaScript和Java测试框架的经验,所以我必须经历一个很大的学习曲线来理解框架。这个解释对于我了解什么是 unittest以及如何开始使用它非常有用。我曾经低估了阅读文档的重要性,但现在我知道这项技能是多么重要。Jest
Junit
unittest
为什么框架unittest
在对一些最流行的 Python 测试框架进行一些研究时,我遇到了,并且。它们都是很棒的工具,但是,我决定尝试这个项目,因为 unittest 的灵感来自我之前有一些经验。尝试和学习不同的框架以最终找出我们最喜欢的框架总是好的。我将为我的下一个Python项目进行尝试。每个测试框架都有其命名文件和结构化代码的约定,这是查看示例并浏览所选框架的文档的另一个重要原因。pytest
nose
unittest
unittest
JUnit
pytest
有一个好的测试计划
在开始之前有一个好的测试计划非常重要。
1) 了解你的代码做了什么
- 函数采用哪种输入
- 程序的功能是什么
- 预期输出是多少
2)好的和坏的测试场景
- 想想成功案例和异常案例。例如,如果您正在构建学校管理系统 – 添加同一学生两次应该会导致某种警告。
3) 什么不需要测试
- 不需要测试的一个很好的例子是来自外部包的功能。另一个示例是调用代码已测试的函数的程序。
4) 编写测试
- 然后,是测试写作部分!
- 例如,如果您正在构建学校管理系统 – 则可以测试添加学生、加载现有学生、添加同一学生两次等功能。
过程
对于我的项目,我在文件夹下创建了两个测试文件 – 和。test_parser.py
test_ssg.py
test
如本文档所述:
unittest
要求:
- 将测试作为方法放入类中
- 在类中使用一系列特殊的断言方法,而不是内置语句
unittest.TestCase
assert
1)要开始使用unittest,我首先必须:
import unittest
2)然后,我创建了一个从该类继承的类,它旨在测试我的SSGTest
TestCase
class 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 个不需要,并为您提供了一种重构代码的好方法。当我们需要创建用于测试目的或模拟目的的假数据库时,通常会使用它。
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/293052.html