[英]Python unittest for modules
我想通過調用
python -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 個選項,但它們不是那么整潔,所以我想要更多輸入:
但是,我發現此頁面說明
切勿將 package 目錄或 package 內的任何目錄直接添加到 Python 路徑。
提出的 arguments 似乎是有道理的,隨着我們的存儲庫不斷增長,我們應該努力做到這一點。
你會怎么做?
如果您還想讓這些模塊獨立,那么它們不應該在另一個模塊內。 因為那樣的話,你已經違反了“永遠不要在模塊中添加頁面目錄......”然后你也可以將該路徑添加到 pythonpath 中。
如果您不想對my_module
進行任何更改以將其變成可以由單元測試導入的 package,則一種解決方案是將單元測試移至my_module
中。 例如,您可以:
# my_module/bar.py
from foo import baz
# my_module/test_bar.py
import bar
# Tests...
然后從my_module
內部運行python -m unittest discover
或從項目根目錄運行 python -m python -m unittest discover --start-directory my_module
。
順便說一句,我認為這里的術語可能有些混亂。 在 Python 中,模塊通常是單個.py
文件,而 package 通常是包含一組.py
文件的文件夾,其中一個是__init__.py
。 出於這個原因, foo
和bar
可能真的是模塊,而my_module
可能是 package (或者如果它有一個__init__.py
文件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.