关于单元测试:Python开源项目的正常结构是什么,运行测试的首选方式是什么?

What's the normal structure of a Python open source project and what's the preferred way of running the tests?

我写了一些我想分享的代码,我想在创建/维护它的结构时遵循最佳实践。我将在BitBucket上托管代码,现在我正在考虑如何组织它。这是一个好的结构吗?

1
2
3
4
project_name/
    lib/
    test/
    README

所以,这将在lib中包含源代码,在test中包含测试。这是在Python项目中实现的吗?这是我看到的Ruby项目最常用的结构。另外,当我运行单元测试时,这样做是否被认为是一个好的实践:

1
2
set PYTHONPATH=`pwd`/lib
python test/a_test.py


我喜欢的方法如下:

  • 使用distutils并创建setup.py文件。(这是最有用的当你有很多扩展类的时候)。这将允许您安装模块系统范围或在virtualenv目录中。
  • 如果你想进行认真的测试,但要保持随意的态度,doctest是您想要的,因为它可以作为"裸骨"文档的两倍(当您记录测试并包括一些关于它正在做什么的评论时)。您可以使用doctest在代码的docstrings中使用测试,或者将测试保存在一些单独的.txt文件中。

通过将setup命令扩展到setup.py文件中适当的cmdclass=...条目,可以集成doctest。请参阅此示例(CouchDB设置)对于在setup.py中集成测试的解决方案。(它使用单独的文件有测试和实际文档,这也是可能的)。