【问题标题】:Where should I put tests when packaging python modules?打包python模块时应该在哪里进行测试?
【发布时间】:2011-07-17 11:52:18
【问题描述】:

我有一个位于命名空间中的模块。测试和测试所依赖的数据应该放在命名空间中还是放在 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

问题是否相当于是否应该安装测试?

【问题讨论】:

标签: python testing namespaces distribution


【解决方案1】:

你应该把你的测试模块放在它根据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

【讨论】:

  • 测试中的 import 语句是什么?
  • 测试可以使用通常的模块导入。测试通常通过绝对路径和自定义的 PYTHONPATH 环境变量运行,尤其是来自像 PyCharm 这样的 IDE。
  • 您不应将子模块命名为 test 以避免与也命名为 test 的标准库模块混淆。
  • 尽管如此,The Hitchhiker's Guide to Python 建议将测试放在外面:docs.python-guide.org/en/latest/writing/structure!
  • “The Hitchhiker's Guide to Packaging”自 2010 年以来未更新。请使用此 packaging.python.org 指南
【解决方案2】:

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's Guide to Packaging”。自 2010 年以来一直没有更新!

(不要混淆这两页。《Python 搭便车指南》是一本非常扎实的书)

【讨论】:

  • 另见jeffknupp.com/blog/2013/08/16/…,它将测试也放在项目根目录中。
  • 自相矛盾的是,这个 The Hitchhiker's Guide to Python 建议将测试放在外面:docs.python-guide.org/en/latest/writing/structure
  • @Kyr 很有趣,这不是您链接的文章现在所说的,我想它已更新以建议将测试放在主包之外
  • @MaciejUrbański,谢谢!那就不要遵循The Hitchhiker's Guide to Python! :)
  • @Kyr 不要混淆这两个页面。 《The Hitchhiker's Guide to Python》是一本非常扎实的书
【解决方案3】:

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

    1234563头痛,直到你意识到发生了什么。将它放在主模块中解决了这个问题,因为它现在位于(希望)全球唯一的命名空间下。
  • 我不喜欢将测试模块放在用户包中,因为测试运行者必须搜索生产代码。对于大多数人来说,这可能不是问题。但是,如果您碰巧是一名硬件测试工程师,您可能会在您的生产代码中大量使用“测试”这个词,并且不希望 unit 测试运行程序来获取这些东西。如果所有测试都在一个与生产代码分开的地方,那就容易多了。

  • 我可以将我的测试文件夹进一步细分为测试类型,例如unitfunctionalintegration。我的功能测试往往依赖于奇怪的专有硬件、数据或者速度很慢。所以我很容易在开发过程中持续运行快速单元测试文件夹。

  • 有时将测试置于与其测试对象相同的包层次结构中会很方便。

不过,总的来说,我认为在考虑到每个人的建议之后,自己思考最适合您的特定问题领域的方法很重要。 “最佳实践”是开发流程的重要起点,而不是终点。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2014-02-04
    • 2023-04-09
    • 1970-01-01
    • 2023-03-12
    • 2023-03-21
    • 2017-06-06
    • 2010-10-23
    相关资源
    最近更新 更多