如何编写现代Python测试?

12 投票
5 回答
2437 浏览
提问于 2025-04-15 19:50

现在写Python测试的最新方法是什么?应该使用哪些模块或框架呢?

还有一个问题:doctest测试还有用吗?还是说所有的测试都应该用更现代的测试框架来写呢?

谢谢,Boda Cydo。

5 个回答

5

我对 doctests 了解不多,但在我大学的时候,大家都在学习和使用 nose 测试。

如果你想安装 nose,可以按照以下步骤来做(我假设你是在使用 Windows 电脑):

  1. 先安装 setuptools
  2. 打开 DOS 命令提示符(开始 -> 所有程序 -> 附件 -> 命令提示符)
  3. 在这个步骤中,你需要连接到互联网。在 DOS 窗口中输入:C:\Python25\Scripts\easy_install nose

如果你使用的是其他操作系统,可以查看 这个网站

编辑:

我写这篇文章已经两年了。现在,我了解到一个叫做 契约设计 的编程原则。这个原则允许程序员为代码中的所有函数定义前置条件、后置条件和不变条件(统称为契约)。这样,如果有任何契约被违反,就会抛出错误。

我推荐的 Python DbC 框架叫做 PyContract,我在我的 进化编程框架 中成功使用过它。

9

使用内置的 unittest 模块依然简单又实用。其他的单元测试选项,比如 py.testnosetwisted.trial,大多数情况下都能和 unittest 兼容。

文档测试(doctests)的价值依旧,它们非常适合用来 测试你的文档,而不是测试你的代码。如果你在文档字符串里放了代码示例,文档测试可以帮助你确保这些示例是正确的并且是最新的。没有什么比尝试复现一个示例却失败,更糟糕的事情了,结果发现其实是文档的问题。

12

通常,我们会使用内置的 unittest 模块来创建单元测试,并把这些测试组合成可以独立运行的测试套件。unittest 和 jUnit 非常相似(其实是受它的启发),所以使用起来也很简单。

如果你对最新的变化感兴趣,可以看看 Michael Foord 在 PyCon 上的演讲:

PyCon 2010: 新的改进:unittest 的即将变化

撰写回答