這失敗了:
def test_main_imports_pathlib():
print(f'"pathlib" in sys.modules {"pathlib" in sys.modules}') # prints "True"
if 'pathlib' in sys.modules:
del sys.modules['pathlib']
import core.__main__
assert 'pathlib' in sys.modules
但__main__.py看起來像這樣:
import pathlib
注意事項是使用傳統的“src”和“tests”頂級目錄設定的,是的,__main__.py肯定會在上述測驗中匯入。
有沒有辦法使用pytest測驗應用程式檔案是否匯入模塊?我愿意接受這樣的想法,即這可能會被視為“實施細節”,而我應該測驗更大的東西。但事實上,我認為這是一個微不足道的例子,你可能有理由檢查:什么進口了什么......
事實上,我想了解為什么上述失敗。
uj5u.com熱心網友回復:
您的問題很可能core.__main__已經加載,匯入它不會再次加載它。您還必須從模塊快取中洗掉該模塊,例如:
def test_main_imports_pathlib():
if 'pathlib' in sys.modules:
del sys.modules['pathlib']
if '__main__' in sys.modules:
del sys.modules['__main__']
import core.__main__
assert 'pathlib' in sys.modules
另一種可能性是強制重新加載匯入的模塊:
from importlib import reload
def test_main_imports_pathlib():
if 'pathlib' in sys.modules:
del sys.modules['pathlib']
main_loaded = 'core.__main__' in sys.modules
import core.__main__
if main_loaded:
reload(core.__main__)
assert 'pathlib' in sys.modules
正如評論中提到的,第二個版本不依賴于模塊快取中模塊的正確名稱,因此更可靠。
更新:防止邁克嚙齒動物提出的雙重加載。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/324992.html
上一篇:所有由小于固定數的數字組成的表格
下一篇:如何將用戶輸入作為方法傳遞?
