簡體   English   中英

pytest:測試子包的導入

[英]pytest: test for import of subpackage

我想做以下事情。 在我的項目中a我有一個帶有實例fac=Fac()的工廠類Fac ,其中某些類注冊到。 這些類駐留在子包ab

如果我執行普通import a ,則不會導入子包ab也不會注冊任何類,因此fac.registered_classes是一個空列表。

導入子包b fac.registered_classes將填充子包b的類。

為了不混淆用戶,我添加了這一行

在包a__init__.pyimport .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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM