1

我习惯于在 C# 中使用AutoFixture.AutoMoq,并想知道 Python 是否有类似的东西。我没有使用 django 或数据库,所以django-autofixture不会帮助我。

我正在寻找的是可以减少我需要编写的代码,以使用存根/模拟设置所有相互关联的对象以进行测试。我正在使用 IoC 模式进行设计(但没有 DI 框架,因为 Python 并不真正需要它们)。

我正在使用鼻子和软糖。

4

1 回答 1

1

试试看Mock

它允许你模拟类

from mock import Mock
mock = Mock()

补丁功能

from mock import patch

@patch("package.function")
def test():
    do_stuff()

然后断言你调用了多少次函数

mock = Mock()
mock.foo()
mock.foo.assert_called_once()

所以说你有一个你描述的类结构。

class A(object):
    def __init__(self, class_b):
        self.class_b = class_b
        ...

class B(object):
    def __init__(self, class_c):
        ...

...

那么如果你想模拟出 A

In [2]: import mock

In [3]: mock = mock.Mock()

In [4]: a = A(mock)

In [5]: a.class_b
Out[5]: <Mock id='21280080'>

往下走:

In [6]: a.class_b.class_c
Out[6]: <Mock name='mock.class_c' id='21281488'>
In [7]: a.class_b.class_c.class_d
Out[7]: <Mock name='mock.class_c.class_d' id='21051984'>

无论您将代码耦合得多么紧密,它都会为您模拟出来。我想 Fudge 有类似的方法可以做到这一点

于 2013-08-27T20:54:57.740 回答