我有一个位于命名空间中的模块。测试依赖的测试和数据应该放在命名空间中还是在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
问题是否应该是否应该安装测试?
答案 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}的全局软件包这会引起很多混乱和头痛,直到你意识到发生了什么。把它放在主模块中可以解决这个问题,因为它现在位于(希望)全局唯一的命名空间之下。
我不喜欢将测试模块放在用户包中,因为测试运行者必须搜索生产代码。这对大多数人来说可能不是问题。但是,如果你碰巧是一名硬件测试工程师,你可能会使用“测试”这个词。您的生产代码中有很多,并且不希望单元测试运行器选择那些东西。如果所有测试都在与生产代码分开的一个地方,那就容易多了。
我可以进一步将我的测试文件夹细分为测试类型,例如tests
,unit
和functional
。我的功能测试往往依赖于奇怪的专有硬件,数据或速度慢。因此,在我开发时,我可以轻松地连续运行快速单元测试文件夹。
有时可以方便地将测试置于与测试内容相同的包层次结构中。
总的来说,在考虑到每个人的建议之后,我认为自己考虑一下对于您的特定问题领域最有用的是非常重要的。 '最佳做法'开发流程是很好的起点,而不是终点。