2

我在理解 python 中的模拟库时遇到问题。这是示例:A 有两个文件 test.py 和 another.py

测试.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

另一个.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'>

为什么无法修补另一个.py 中的类?就我而言,我有大量的功能需要测试,它从其他文件中导入类。所以我不明白如何正确地对待他们。

谢谢

4

1 回答 1

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'>

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

于 2012-07-15T15:24:18.647 回答