作为一名具有 JavaScript 背景的开发人员,我花了相当多的时间使用 Jest 编写测试。在我的项目 gimme_readme 中,由于我使用的是第 3 方 npm 模块,我必须使用 Node 和 Jest 来尝试一些实验性功能。我找到了很棒的 Stack Overflow 线程,教我如何在使用 ES6 语法时运行 Jest 测试。如果没有这些聪明人的智慧,我只能说我会很挣扎!然而,有了如何使用 Jest 实验功能的知识,我能够:
我上面描述的 CI 管道的代码可以在这里找到,并且设置为在向任何分支进行推送或有拉取请求时运行。这样,任何试图为我的存储库做出贡献的人都会知道他们贡献的代码是否“足够好”,可以将其合并到我的主分支中 - 至少就自动化测试而言是这样。
不管怎样,我早先为我的存储库所做的工作已经足够了。
本周,我决定接受挑战,为我的朋友 Aryan Khurana 编写的 Python 项目编写一些测试。 Aryan 的项目是一个名为 github-echo 的命令行工具,它提供了有关 GitHub 存储库的见解。使用陌生的语言和我从未使用过的测试框架(PyTest)绝对超出了我的舒适区,但我真的很感激 Aryan 愿意向我展示诀窍(感谢 Aryan!)。
当我开始对 Aryan 的存储库进行测试时,我立即对这些测试的不同外观感到不知所措。虽然 Jest 对我来说已经很熟悉了,但 Python 的 pytest 却感觉很陌生。尽管如此,在Aryan的指导和决心下,我开始了解它的独特之处。
让我们分解一下我在他们的测试用例中发现的内容:
参数化测试:首先引起我注意的是@pytest.mark.parametrize装饰器。这与 Jest 的 test.each 类似,但语法更清晰:
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
上下文管理器:Python 使用 pytest.raises 上下文管理器,而不是 Jest 的 Expect().toThrow():
@pytest.mark.parametrize( 'invalid_url', [ 'https://gitlab.com/username/repository', 'https://github.com/username', # ... more test cases ], )
临时文件系统:测试使用 pytest 的 tmp_path 固定装置进行文件系统操作,这比在 Jest 中设置模拟文件系统要干净得多:
with pytest.raises(typer.BadParameter, match='Invalid GitHub repository URL'): check_cli_arguments(invalid_url, 'gemini', 0.5, Path('output.md'))
使用 JavaScript 和 Python 测试框架的经验拓宽了我对软件测试的视野。虽然 Jest 感觉像是我的家乡,但我开始欣赏 pytest 的强大功能,例如参数化测试和固定装置。无论您是编写 JavaScript 还是 Python 测试,最终目标都是一样的:向用户提供可靠、经过良好测试的代码。
以上是# 从 Jest 到 Pytest:JavaScript 开发人员的 Python 测试之旅的详细内容。更多信息请关注PHP中文网其他相关文章!