gpt4 book ai didi

模块的 Python 单元测试

转载 作者:行者123 更新时间:2023-12-04 09:51:17 24 4
gpt4 key购买 nike

我想运行 Python unittest通过调用

python -m unittest discover 

命令。两个包在一个模块中,如下所示
test
|_ mytest.py
my_module
|__foo.py
|__bar.py

在哪里 bar.py
#bar.py
from foo import baz
# Do things using baz

问题是当 unittest discover 命令运行时, 中找不到bar.py 了。这是因为 我的模块 在 python 测试中被视为一个适当的模块,所以我需要做
from my_module.foo import baz

但这在单独使用模块时不起作用。那么该怎么办?我看到了 2 个选项,但它们不是那么整洁,所以我想要更多输入:
  • 初始化 my_module 中的 .py 将 my_module 添加到 PYTHONPATH
  • 让 mytest.py 将 my_module 添加到 PYTHONPATH

  • 但是,我发现 this page说明

    Never add a package directory, or any directory inside a package, directly to the Python path.



    提出的论点似乎是有道理的,随着我们的存储库不断增长,我们应该努力做到这一点。

    你会怎么办?

    最佳答案

    如果您不想对 my_module 进行任何更改要将其转换为可以通过单元测试导入的包,一种解决方案是将单元测试移至 my_module .例如,您可以:

    # my_module/bar.py

    from foo import baz

    # my_module/test_bar.py

    import bar

    # Tests...

    然后运行 ​​ python -m unittest discover从内部 my_modulepython -m unittest discover --start-directory my_module从项目根目录。

    顺便说一句,我认为这里的术语可能有些困惑。在 Python 中,一个模块通常是一个 .py文件,包通常是一个文件夹,其中包含一组 .py文件,其中之一是 __init__.py .因此, foobar可能是真正的模块, my_module可能是一个包(或者如果它有一个 __init__.py 文件的话)。

    关于模块的 Python 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62007744/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com