python - python模块的单元测试基础设施

标签 python unit-testing code-coverage doctest

我正在编写一个 python 模块,我想对其进行单元测试。我是 python 的新手,对可用的选项有点迷惑。

目前,我想将我的测试写成 doctests因为我喜欢声明式而不是命令式风格(但是,如果它被误导,请随时纠正我对这种偏好的误解)。然而,这提出了几个问题:

  1. 我应该把测试放在哪里?在与他们正在测试的代码相同的文件中(或在文档测试的文档字符串中)?还是将它们分开放在各自的目录中更好?
  2. 如何从命令行一次运行整个模块中的所有测试?
  3. 如何报告测试套件的代码覆盖率?
  4. 对于 python 中的单元测试,我应该注意的任何其他最佳实践?

最佳答案

feel free to disabuse me of this preference if it is misinformed

我相信我比任何其他开源开发人员更广泛地使用 doctest(方式 扩展其预期用途边界),至少在单个项目中是这样 -- 我的 gmpy 中的所有测试项目是doctests。它在 gmpy 开始时是全新的,这似乎是一个很棒的小技巧,如果某件事值得做,那就值得做更多 -- 对吧?-)

错了。除了 gmpy,重做一切作为正确的单元测试会返工太多,我再也没有犯过这个错误:这些天,我使用单元测试作为单元测试,而 doctests 只是为了检查我的文档,因为它们一直是用来使用的。 doctests 所做的(将预期结果与实际结果进行比较——仅此而已)并不是构建可靠测试套件的良好或可靠基础。从未有过其他意图。

我建议您查看 nose .新 Python 2.7 中的 unittest 模块更丰富、更漂亮,如果您卡在 2.4、2.5 或 2.6,您仍然可以使用 unittest2 的新功能。您可以下载并安装它; nose 很好地补充了 unittest

如果你不能忍受单元测试(但是 - 试试看,它会在你身上成长!-),也许试试 py.test ,一个具有完全不同理念的替代包。

但是,,不要扩展 doctest 来测试文档中示例以外的内容!精确相等比较会经常妨碍你,因为我不得不在 gmpy...

中以我的(隐喻;-)费用学习

关于python - python模块的单元测试基础设施,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3242875/

相关文章:

python - 如何使用字符串格式函数打印对象的表示形式?

Django testing client.login() : Your database backend doesn't behave properly when autocommit is off. 使用前开启 'atomic'

java - 我如何用 Java 模拟这个客户端?

python - 如何测试Python对象的不相等性?

PhpUnit 忽略了它的 XML 配置文件中的*一些*指令

java - 为什么 eCobertura 和 EclEmma 测量的代码覆盖率不同?

node.js - Karma - Istanbul 尔 - 代码覆盖率报告路径

python - 在 Python 中覆盖 "remaining elements truncated"

python - 如何根据条件聚合函数?

Python:合并两列