我习惯使用AutoFixture.AutoMoq使用 C# 并想知道类似的东西是否适用于 Python。我没有使用 django 或数据库,因此 django-autofixture 不会帮助我。
我正在寻找的是能够减少我需要编写的代码来使用 stub /模拟来设置所有相互关联的对象以进行测试。我使用 IoC 模式进行设计(但没有 DI 框架 since Python doesn't really need them )。
我正在使用 Nose 和软糖。
最佳答案
尝试查看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'>
无论你的代码耦合有多紧密,它都会被模拟出来。我想福吉也有类似的方法来做到这一点
关于python - Python 的自动模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18430485/