python模块的单元测试基础结构

fma*_*ark 8 python doctest unit-testing code-coverage

我正在写一个python模块,我想对它进行单元测试.我是python的新手,有点选择可用的选项.

目前,我想把我的测试作为doctests编写,因为我喜欢声明式而不是命令式(但是,如果它被误导,请随意消除我的偏好).然而,这提出了一些问题:

  1. 我应该在哪里进行测试?在与他们正在测试的代码相同的文件中(或在doctests的docstrings中)?或者将它们分成自己的目录是否更好?
  2. 如何一次性从命令行运行整个模块中的所有测试?
  3. 如何报告测试套件的代码覆盖率?
  4. 我应该注意在python中进行单元测试的任何其他最佳实践?

Ale*_*lli 12

如果被误导,请随意消除我的偏好

我相信,我用doctest更广泛的(方式拉伸达到预定可使用边界)比其他任何开源开发者,至少在单个项目中- 所有在我的测试gmpy项目是文档测试.它在当时gmpy是全新的,它似乎是一个很棒的小技巧,如果值得做的事情值得做多余的事 - 对吧? - )

错误.除了gmpy重做一切作为适当的单元测试将是太多的返工,我再也没有犯过这个错误:这些天,我使用单元测试作为单元测试,并且doctests只是检查我的文档,因为他们一直是意在使用.doctests做了什么(比较预期与实际结果的平等 - 这就是全部)并不是建立一个可靠的测试套件的好或基础.它从来没有打算过.

我建议你看看鼻子.unittest新的Python 2.7中的模块更丰富,更好,如果你坚持使用2.4,2.5或2.6,你仍然可以使用你可以下载和安装的unittest2的新功能; nose相辅相成unittest.

如果你不能忍受单一测试(但是 - 尝试一下,它会在你身上发展! - ),也许可以尝试py.test,一个具有完全不同哲学的替代包.

但是,不要延伸doctest到测试文档中的示例以外的东西!完全相等的比较会经常阻碍你,因为我必须在我的(隐喻;-)费用中学习gmpy......