我想嘲笑一個模塊級函數用於初始化類級(非實例)屬性。這裏有一個簡單的例子:Python:如何模擬類屬性初始化函數
# a.py
def fn():
return 'asdf'
class C:
cls_var = fn()
這裏是試圖嘲笑a.fn()一個單元測試:
# test_a.py
import unittest, mock
import a
class TestStuff(unittest.TestCase):
# we want to mock a.fn so that the class variable
# C.cls_var gets assigned the output of our mock
@mock.patch('a.fn', return_value='1234')
def test_mock_fn(self, mocked_fn):
print mocked_fn(), " -- as expected, prints '1234'"
self.assertEqual('1234', a.C.cls_var) # fails! C.cls_var is 'asdf'
我相信這個問題是where to patch但我已經試過進口兩種變化,沒有運氣。我甚至嘗試將import語句移入test_mock_fn(),以便在a.C進入作用域之前模擬的a.fn()將「存在」 - nope仍然失敗。
任何有識之士將不勝感激!
您是否嘗試更改要從語句中使用的導入? 來自進口fn – Rainer
嗨Ranier - 是的,試過了;沒有運氣。 (當我提到'......這兩個變體都是導入...'時,我應該已經更清楚了,模擬中的Python文檔給出了使用'import a'和'from import SomeClass'的例子,我嘗試了這兩種方法) –