2012-07-12 34 views
2

我在Python中理解模擬庫時遇到了問題。 這裏是例子: 一個有兩個文件test.py和another.py如何使用python-mock庫

test.py

#! 
from mock import patch 
from another import C 


class A(object): 
    def method(self): 
     return 2 


@patch('another.C') 
@patch('test.A') 
class TestB(object): 

    def test1(self, mA, mC): 
     print mA, A 
     print mC, C 

another.py

class C(object): 

    def a(self): 
     return 3 

所以,問題是「爲什麼A有輸出:

<MagicMock name='A' id='13985040'> <MagicMock name='A' id='13985040'> 
<MagicMock name='C' id='13993936'> <class 'another.C'> 

爲什麼來自another.py的類不能修補? 在我的情況下,我有很大的功能來測試,並從其他文件中導入類。 所以我不能理解他們如何正確。

感謝

回答

1

使用Python模擬庫你總是補丁(模擬)在你所真正使用它的位置的函數或類。

既然要導入「C」到「測試」,並用它在那裏,你會打補丁這樣的:

@patch('test.C') 
@patch('test.A') 
class TestB(object): 

    def test1(self, mA, mC): 
     print mA, A 
     print mC, C 

哪位能給這樣你的輸出:

<MagicMock name='A' id='3070076204'> <MagicMock name='A' id='3070076204'> 
<MagicMock name='C' id='3070084940'> <MagicMock name='C' id='3070084940'> 

你可以嘲笑你想要的任何類,方法或函數。但是你需要在實際使用的位置模擬對象。