我有一個簡單的目錄結構:
proj/
src/
__init__.py
foo.py
bar.py
test/
__init__.py
test_foo.py
test_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()
檔案
import bar
def start():
bar.do_stuff()
運行我的測驗時(我使用的是 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'
我不確定為什么在匯入 src/foo 時測驗無法發現 src/bar
uj5u.com熱心網友回復:
你的bar.py檔案里有什么?只是do_stuff()功能?還是do_stuff()函式是物件的方法bar?
根據上述問題的答案,嘗試在您的foo.py檔案中執行以下操作:
from proj.src.bar import [name of function you're testing here]
在您的具體情況下,如果do_stuff()是一個獨立的功能,它會是這樣的:
from proj.src.bar import do_stuff
然后你的foo.py檔案將是:
from proj.src.bar import do_stuff
def stuff():
do_stuff()
但是,如果do_stuff()是bar物件的方法,它可能是這樣的,盡管在不知道bar.py檔案內容的情況下很難判斷:
from proj.src.bar import bar
然后您的foo.py檔案將類似于您現在擁有的方式:
from proj.src.bar import bar
def stuff():
bar.do_stuff()
我最近在嘗試將一個相鄰檔案匯入另一個檔案時遇到了類似的問題。這個
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334510.html
標籤:Python 视觉工作室代码 python-unittest
