[英]pytest: test for import of subpackage
我想做以下事情。 在我的項目中a
我有一個帶有實例fac=Fac()
的工廠類Fac
,其中某些類注冊到。 這些類駐留在子包ab
。
如果我執行普通import a
,則不會導入子包ab
也不會注冊任何類,因此fac.registered_classes
是一個空列表。
導入子包b
fac.registered_classes
將填充子包b
的類。
為了不混淆用戶,我添加了這一行
在包a
的__init__.py
中import .b
。
現在,如果fac.registered_classes
不為空,我想用pytest
編寫一個基本通過的測試; 所以沒有人不小心刪除了我的__init__.py
那一行。 讓我們稱之為測試test_import_b
不同的測試當然也會測試子包b
功能,從而顯式地導入b
本身。
但是,似乎測試運行期間的所有導入都可用於所有測試。 如果在__init__.py
刪除導入行,則僅運行單個測試test_import_b
失敗,但如果同時運行所有測試,則不會再運行。
我該怎么做才能使我的測試設置正常工作?
這是正確的 py.test 和 Python 行為。 模塊主體級代碼在導入模塊時運行。 Python 虛擬機為每個進程維護導入的模塊。
我不相信有一個很好的解決方案來實現你想要的行為。 我想到了兩種策略
永遠不要僅在模塊導入時隱式注冊任何內容 - 通過函數調用顯式注冊所有內容,例如使用init()
在明確需要導入並運行 register 的測試中,在測試開始時導入它或制作一個執行導入的夾具
例如
def test_boohoo():
import a.b
# Test goes here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.