2015-09-24 100 views
2

我在Python中使用模擬時遇到了找出路徑的問題。mock.patch的正確路徑

想,我有以下文件

file1.py

def func1(): 
    return 'X' 

file2.py

from file1 import func1 

class ClassA(): 

    def func_that_uses_func1(self): 
     x = func1() 

我怎麼能修補FUNC1的使用上ClassA的?我曾嘗試@ mock.patch(「file2.func1」),但我得到一個錯誤AttributeError: <class 'ClassA'> does not have the attribute 'func1'

回答

1

我認爲,要真正地做你的模擬爲@mock.patch('file2.func1')。我下面的例子可能會有幫助:

from file2 import ClassA 
from mock import patch 
import unittest 

class TestClassA(unittest.TestCase): 
    def setUp(self): 
     self.c = ClassA() 

    @patch('file2.func1') 
    def test_func(self, m_func1): 
     self.c.func_that_uses_func1() 

     self.assertEqual(m_func1.called, 1) 

if __name__ == '__main__': 
    unittest.main() 
+0

嗨,我剛剛更新了我的問題,因爲我已經使用引號將路徑傳遞給修補程序修飾符。 –

+0

我複製粘貼你提供的代碼,並使用我發佈的代碼和嘲笑工作正常。還有什麼可以做不同的事嗎? – idjaw

+0

我所做的唯一的區別是在你的方法中添加自我,我在你的OP – idjaw

1

爲貴「必須使用真實路徑」的問題,你只需要編寫從測試文件,並要導入的文件的最低共同祖先的路徑。 如果你想使用導入模塊而不是字符串格式,我建議你使用patch.object