我习惯于在 C# 中使用AutoFixture.AutoMoq,并想知道 Python 是否有类似的东西。我没有使用 django 或数据库,所以django-autofixture
不会帮助我。
我正在寻找的是可以减少我需要编写的代码,以使用存根/模拟设置所有相互关联的对象以进行测试。我正在使用 IoC 模式进行设计(但没有 DI 框架,因为 Python 并不真正需要它们)。
我正在使用鼻子和软糖。
我习惯于在 C# 中使用AutoFixture.AutoMoq,并想知道 Python 是否有类似的东西。我没有使用 django 或数据库,所以django-autofixture
不会帮助我。
我正在寻找的是可以减少我需要编写的代码,以使用存根/模拟设置所有相互关联的对象以进行测试。我正在使用 IoC 模式进行设计(但没有 DI 框架,因为 Python 并不真正需要它们)。
我正在使用鼻子和软糖。
试试看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 有类似的方法可以做到这一点