我有一个按预期正确运行的 Python 程序,但由于某种原因我无法执行测试。
在文件夹层次结构中,tests是src的同级文件夹,执行测试时遇到的错误是:
ModuleNotFoundError: No module named 'sub'
这里,层次结构加上代码的MWE:
- src/
- __init__.py
- dummyA.py
- main.py
- sub/
-__init__.py
- dummyB.py
- tests/
- __init__.py
- test_s.py
src/dummyA.py
from sub.dummyB import Sub
class Sup:
def __init__(self):
self.sub_var = Sub()
def hello_sup(self, s):
sub_word = self.sub_var.hello_sub(s)
return f"Super {sub_word}!"
src/sub/dummyB.py(在“sub”文件夹内)
class Sub:
def hello_sub(self, a):
return f"{a}"
src/main.py
from sub.dummyB import Sub
from dummyA import Sup
def main():
sub = Sub()
sup = Sup()
dummy_text = "cat"
sub_word = sub.hello_sub(dummy_text)
sup_word = sup.hello_sup(dummy_text)
print("Sub is:", sub_word) # cat
print(f"Sup is: {sup_word}") # Super cat!
if __name__ == "__main__":
main()
测试/test_s.py
from src.dummyA import Sup
def test_sub_sup():
dummy_sup = Sup()
expected_res = dummy_sup.hello_sup("cat")
assert expected_res == "Super cat!"
错误日志:
ImportError: Failed to import test module: test_s
Traceback (most recent call last):
File "/usr/lib/python3.11/unittest/loader.py", line 162, in loadTestsFromName
module = __import__(module_name)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/demo/tests/test_s.py", line 1, in <module>
from src.dummyA import Sup
File "/home/user/demo/src/dummyA.py", line 1, in <module>
from sub.dummyB import Sub
ModuleNotFoundError: No module named 'sub'
无论我使用pytest还是unittest,错误总是相同的。 看起来系统在 dummyA.py 的第一行中断,因为它无法导入名为 sub 的模块。奇怪的是,因为应用程序运行时同一行被正确执行。
如你所见,我还在每个文件夹中使用了init.py,但这没有帮助。
我错过了什么吗? 谢谢!
有这个结构
./src/dummyA.py
./src/sub/dummyB.py
./src/sub/__init__.py
./src/main.py
./src/__init__.py
./tests/test_s.py
修复
test_s.py
from dummyA import Sup
def test_sub_sup():
然后运行
PYTHONPATH=$PYTHONPATH:$PWD/src pytest -v tests
您会收到
collected 1 item
tests/test_s.py::test_sub_sup PASSED [100%]
====================================================== 1 passed in 0.02s ======================================================