在打包python模块时我应该在哪里进行测试?

时间:2011-03-17 15:11:21

标签: python testing namespaces distribution

我有一个位于命名空间中的模块。测试依赖的测试和数据应该放在命名空间中还是在setup.py站点的顶层?

./company/__init__.py
./company/namespace/__init__.py
./company/namespace/useful.py
./company/namespace/test_useful.py
./company/namespace/test_data/useful_data.xml
./setup.py

./company/__init__.py
./company/namespace/__init__.py
./company/namespace/useful.py
./test_useful.py
./test_data/useful_data.xml
./setup.py

问题是否应该是否应该安装测试?

3 个答案:

答案 0 :(得分:20)

Sample Project将测试存储在模块外部。

目录结构如下所示:

├── data
│   └── data_file
├── MANIFEST.in
├── README.rst
├── sample
│   ├── __init__.py
│   └── package_data.dat
├── setup.cfg
├── setup.py
└── tests
    ├── __init__.py
    └── test_simple.py

相关:包装指南:https://packaging.python.org/en/latest/

提示:不要遵循" The Hitchhiker的包装指南"。它自2010年以来一直没有更新!

(不要混淆两个页面。" The Hitchhiker蟒蛇指南"是一本非常扎实的书)

答案 1 :(得分:15)

您应该根据The Hitchhiker's Guide to Packaging将测试模块放入其测试的模块中。

以下是他们的例子:

TowelStuff/
    bin/
    CHANGES.txt
    docs/
    LICENSE.txt
    MANIFEST.in
    README.txt
    setup.py
    towelstuff/
        __init__.py
        location.py
        utils.py
        test/
            __init__.py
            test_location.py
            test_utils.py

这样,您的模块将随其测试一起分发,用户可以使用它们来验证它是否适用于他们的设置。

请参阅http://the-hitchhikers-guide-to-packaging.readthedocs.org/en/latest/creation.html

答案 2 :(得分:1)

我个人创建一个tests包作为主包的子包,原因如下:

  • 如果tests与根软件包并行,那么您或用户可能会错误配置setup.py并意外地公开名为{{1}的全局软件包这会引起很多混乱和头痛,直到你意识到发生了什么。把它放在主模块中可以解决这个问题,因为它现在位于(希望)全局唯一的命名空间之下。

  • 我不喜欢将测试模块放在用户包中,因为测试运行者必须搜索生产代码。这对大多数人来说可能不是问题。但是,如果你碰巧是一名硬件测试工程师,你可能会使用“测试”这个词。您的生产代码中有很多,并且不希望单元测试运行器选择那些东西。如果所有测试都在与生产代码分开的一个地方,那就容易多了。

  • 我可以进一步将我的测试文件夹细分为测试类型,例如testsunitfunctional。我的功能测试往往依赖于奇怪的专有硬件,数据或速度慢。因此,在我开发时,我可以轻松地连续运行快速单元测试文件夹。

  • 有时可以方便地将测试置于与测试内容相同的包层次结构中。

总的来说,在考虑到每个人的建议之后,我认为自己考虑一下对于您的特定问题领域最有用的是非常重要的。 '最佳做法'开发流程是很好的起点,而不是终点。

相关问题