我有一個我正在測試的Python模塊,並且由於模塊工作的方式(它在導入時會進行一些初始化)已在每個unittest
期間重新加載模塊,初始化。 reload
在setUp
方法中完成,所以所有的測試實際上是重新加載模塊,這很好。保存重新加載的Python模塊用於測試目的
如果我只在任何給定的Python會話期間在該文件中運行測試,這一切都很好,因爲我從不需要對模塊的前一個實例的引用。但是當我使用Pydev或unittest
的discover
時,我得到的錯誤與here一樣,因爲導入此模塊的其他測試已經失去了對模塊中對象的引用,因爲它們是在測試中的所有重新加載業務之前導入的。
也有類似的問題,比如this one,但這些都是在重新加載後處理更新對象。我想要做的是在初始導入之後保存模塊的狀態,運行我的測試來完成所有重新加載,然後在測試tearDown
中將模塊的初始引用放回,以便下游運行的測試使用該模塊仍然有正確的參考。請注意,我沒有對模塊進行任何更改,我只是重新加載它來測試它所做的一些初始化部分。
還有一些解決方案在模塊代碼中包含鉤子,我不感興趣。我不想要求開發人員將代碼推入代碼庫,以便測試可以運行。我正在使用Python 2.6和unittest
。我發現有些項目的存在類似process-isolation,儘管我不確定這是否完全符合我的要求,但它不適用於Python 2.6,並且我不想在可能的情況下將新包添加到我們的堆棧。存根編號如下:
import mypackage.mymodule
saved_module = mypackage.mymodule
class SomeTestThatReloads(unittest.TestCase):
def setUp(self):
reload(mypackage.mymodule)
def tearDown(self):
# What to do here with saved_module?
def test_initialization(self):
# testing scenario code