python - Python 的自动模拟?

标签 python unit-testing nose automocking fudge

我习惯使用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/

相关文章:

python - 带有百分比标签的python中的圆形条形图

python - 让 IPython 使用 Python 3 而不是 Python 2 运行

c# - 一个单元测试如何修改 XML 文档?

javascript - angularjs:指令的访问 Controller

python - 使用 Nose 进行测试的著名 Python 项目

python - 使用装饰器进行重构以减少代码量

python - 有关管理大型、多方面的企业 Python 代码库的信息?

python - 正确将 png 转换为 npy numpy 数组(图像到数组)

php - 当我尝试使用 PHPUnit 获取单元测试的代码覆盖率时,没有任何反应

python - 如何防止 Nose 运行和报告重复的测试?