use*_*539 7 python python-unittest visual-studio-code
我有一个简单的目录结构:
proj/
src/
__init__.py
foo.py
bar.py
test/
__init__.py
test_foo.py
Run Code Online (Sandbox Code Playgroud)
测试_foo.py
import unittest
import sys
sys.path.append('../src')
from src import foo
class TestFoo(unittest.TestCase):
def test_foo(self):
foo.start()
if __name__ == '__main__':
unittest.main()
Run Code Online (Sandbox Code Playgroud)
foo.py
import bar
def start():
bar.do_stuff()
Run Code Online (Sandbox Code Playgroud)
运行测试时(我使用 vscode),出现以下错误:
Failed to import test module: test_foo
Traceback (most recent call last):
File "~/.pyenv/versions/3.8.6/lib/python3.8/unittest/loader.py", line 436, in _find_test_path
module = self._get_module_from_name(name)
File "~/.pyenv/versions/3.8.6/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name
__import__(name)
File "~/proj/test/test_foo.py", line 6, in <module>
from src import foo
File "~/proj/src/foo.py", line 1, in <module>
import bar
ModuleNotFoundError: No module named 'bar'
Run Code Online (Sandbox Code Playgroud)
我不知道为什么测试在导入 src/foo 时无法发现 src/bar
小智 0
你的文件里有什么bar.py
?只是do_stuff()
功能吗?或者do_stuff()
函数是对象的方法bar
?
根据上述问题的答案,尝试在您的foo.py
文件中执行以下操作:
from proj.src.bar import [name of function you're testing here]
Run Code Online (Sandbox Code Playgroud)
do_stuff()
在您的具体情况下,如果是一个独立函数,则如下所示:
from proj.src.bar import do_stuff
Run Code Online (Sandbox Code Playgroud)
然后你的foo.py
文件将是:
from proj.src.bar import do_stuff
def stuff():
do_stuff()
Run Code Online (Sandbox Code Playgroud)
然而,如果do_stuff()
是对象的方法bar
,它可能会是这样的,尽管在不知道文件内容的情况下很难判断bar.py
:
from proj.src.bar import bar
Run Code Online (Sandbox Code Playgroud)
然后你的foo.py
文件将类似于你现在的样子:
from proj.src.bar import bar
def stuff():
bar.do_stuff()
Run Code Online (Sandbox Code Playgroud)
我最近在尝试将一个相邻文件导入另一个文件时遇到了类似的问题。这个链接也帮助了我。
归档时间: |
|
查看次数: |
3696 次 |
最近记录: |