我想通过调用
来运行Python unittestpython -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 中找到 foo 。这是因为 my_module 被视为python测试中的适当模块,所以我需要做
from my_module.foo import baz
,但是在独立使用模块时不起作用。那么该怎么办?我看到2个选项,但它们不是那么整齐,所以我想输入更多信息:
但是,我发现this page指出
从不添加包目录或包内的任何目录, 直接转到Python路径。
提出的论点似乎是有道理的,并且随着我们知识库的不断增长,我们应该设法做到这一点。
你会怎么做?
答案 0 :(得分:1)
如果您还希望这些模块为STANDALONE,则它们不应位于另一个模块内。 因此,您已经违反了“从不在模块内部添加页面目录...” 然后,您也可以将该路径添加到pythonpath中。
答案 1 :(得分:1)
如果您不想对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_module
或从项目根目录运行python -m unittest discover --start-directory my_module
。
顺便说一句,我认为这里的术语可能有些混乱。在Python中,模块通常是单个.py
文件,而包通常是包含一组.py
文件的文件夹,其中一个文件是__init__.py
。因此,foo
和bar
可能实际上是模块,而my_module
可能是一个包(或者如果它有一个__init__.py
文件,则可能是一个包)。