2012-07-12 80 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'> 

你可以嘲笑你想要的任何类,方法或函数。但是你需要在实际使用的位置模拟对象。