python - 如何使用python-mock库

标签 python mocking

我在理解 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'>

为什么 other.py 中的类无法修补? 就我而言,我有大量的函数需要测试,并且它从其他文件导入类。 所以我不明白如何正确处理它们。

谢谢

最佳答案

使用 Python 模拟库,您始终可以在实际使用的位置修补(模拟)函数或类。

由于您将“C”导入“test”并在那里使用它,因此您可以像这样修补它:

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

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

关于python - 如何使用python-mock库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457318/

相关文章:

python - Robot Framework - 将库函数作为参数传递

php - 如何使用 PHPUnit 模拟 SimpleXMLElement 对象?

python模拟补丁顶级包

objective-c - 在 Objective-C 中,让您的委托(delegate)符合多个协议(protocol)是不是不好的做法?

python - 解析 **kwargs

python - 使用 Python3 将联系人列表从 CSV 文件导入 Telegram

Java Servlet 过滤器在 Ruby [on Rails] 和 PHP 中等效吗?

python - Django 管理员 : automatically generate multiple inlines with the same model

tdd - 作为 "mockist"TDD的从业者,我应该模拟与被测方法在同一类中的其他方法吗?

php - UnitTest 对象模拟或真实对象