問題
我無法讓 VSCode/unittest 識別我為其撰寫的 unittests 的子模塊(即后臺例子中的common.nested_module)。
VSCode發現了測驗案例并執行了test_my_module.py中的那些案例,但抱怨說在import陳述句行中沒有common.nested_module模塊(在Output: ModuleNotFoundError: 沒有名為'common.nested_module'的模塊)。
我在執行的測驗案例中添加了print(sys.path),在Python測驗日志中,當添加.env檔案時,我甚至得到了以下的輸出,如What I tried 2.所述:
test_get_version (test_my_module.TestCase1) ... ['/workspaces/test_project/project/tests', '/workspaces/test_project/project/src', '/workspaces/test_project/project/common', '/usr/local/lib/python39. zip', '/usr/local/lib/python3.9', '/usr/local/lib/python3. 9/lib-dynload', '/home/vscode/.local/lib/python3.9/Site-packages', '/usr/local/lib/python3.9/Site-packages']
背景
按照PyPA打包和分發教程,我創建了一個專案結構,省略了其他細節(例如,README.md),如下所示:
project
|--src
|--common
|-- __init__.py
|-- nested_module.py
|-- __init__.py
|-- my_module.py
|--測驗
|--__init__.py
|--test_my_module.py
|--test_nested_module.py
與測驗有關的設定在settings.json中:
{}。
"python.testing.unittestArgs": [/span>
"-v",
"-s"/span>,
"${workspaceFolder}/project/tests"/span>,
"-p",
"test_*.py"
],
"python.testing.cwd": "project/src",/span>
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true,
}
我所嘗試的
project/tests中的__init__.py以及test_nested_module.py中,按照這里的建議添加了以下內容
import os
import sys
PROJECT_PATH = os.getcwd()
SOURCE_PATH = os.path.join(
PROJECT_PATH,"project/src/common"。
)
sys.path.append(SOURCE_PATH)
- 在
project中添加一個.env,包含以下內容,同時添加"python.envFile"。"${workspaceFolder}/afinad/.env"到settings.json,類似于建議這里。
PYTHONPATH = ./common
- 在
python.testing.unittestArgs的settings.json中添加帶有${workspaceFolder}/project/src和.的t選項,作為sggested 這里:
。
"python.testing.unittestArgs": [/span>
"-v",
"-s"/span>,
"${workspaceFolder}/project/tests"/span>,
"-p",
"test_*.py"/span>,
"-t",
"${workspaceFolder}/project/src"
]/span>,
- 運行
python3 -m unittest discover后,在終端改變到./tests,給我的是:
ModuleNotFoundError: 沒有名為'my_module'/span>的模塊。
感謝您花時間閱讀。
uj5u.com熱心網友回復: 經過近兩天對各種建議解決方案的不同組合的嘗試,我發現了我的錯誤。似乎,像我這樣的新手,我感覺到了名字的陰影陷阱。
最初,我打算在 我希望這能為其他人節省一些時間。
標籤:tests中采用與src中相同的檔案夾結構。然而,當我發現test_my_module.py可以作業時,我把test_nested_module.py從tests/common移到tests,但我沒有洗掉tests/common檔案夾。這似乎導致了ModuleNotFoundError,因為在洗掉檔案夾后,它可以正常作業。
