问题标签 [python-mock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5591 浏览

python - 如何模拟 Django 模型查询

我想模拟以下CanonPerson模型

我很迷茫如何模拟CanonPerson.objects.filter给我一个可交互的集合,以便我可以继续。

这是我到目前为止所做的:

在计算函数中我可以看到cpses是一个 MagicMock 类型。然而,它是不可迭代的for loop,之后,只是跳过它。我想通过将返回值设置为[mock_cp]我会创建一个可迭代的列表?

0 投票
1 回答
51 浏览

python - 如何模拟一个方法并查看它是否被调用?

我有一个这样结束的方法:

我应该如何对这种情况进行单元测试,其中is_send_emails参数为假,我必须断言sendEmails()没有被调用。

我想我应该嘲笑self.sendEmails()它是否被调用。

但是现在我被卡住了,如何检查。该站点解释了我可以使用的不同断言,但它们似乎都不合适。我应该使用assert_called_with吗?

0 投票
1 回答
73 浏览

python - 如何测试模拟方法的第二个参数?

我正在尝试模拟该sendEmails()方法,并想测试是否使用“test@test.com”电子邮件地址调用了第二个参数。

我可以使用assert_called_with,但我不关心这个测试用例的第一个参数。有没有办法说第一个参数接受任何东西?

0 投票
2 回答
1599 浏览

python - 是否可以查询 Python 模拟对象以获取其调用的返回值?

Python 3 模拟对象支持查询其调用的参数,是否也可以查询它们的调用返回的值?

我的特殊情况是我模拟 tempfile.mkdtemp,但作为副作用调用真正的 mkdtemp。我想在我的测试中获取创建的临时目录。

0 投票
1 回答
1454 浏览

python - 避免执行模拟类的 __init__

我有一个__init__功能昂贵的课程。我不希望从测试中调用这个函数。

出于本示例的目的,我创建了一个在以下位置引发异常的类__init__

我有第二个类,它构造一个实例ClassWithComplexInit并使用它的函数。

我正在尝试编写一些单元测试SystemUnderTest#my_func()。我遇到的问题是无论我如何尝试模拟ClassWithComplexInit__init__函数总是会被执行并引发异常。

上面的第二种方法是我从这个类似的问答中得到的,但它也不起作用。它似乎没有运行该__init__函数,但我的断言失败了,因为结果最终是一个模拟实例,而不是我的值。

我还尝试patch在函数中配置一个实例setUp,使用文档建议start的andstop函数。

这似乎也避免了我的__init__功能,但我设置的值get_value.return_value没有得到尊重,并且get_value()仍在返回一个MagicMock实例。

如何模拟一个__init__由我的测试代码实例化的复杂类?理想情况下,我想要一个适用于 TestCase 类中的许多单元测试的解决方案(例如,不需要patch每个测试)。

我正在使用 Python 版本2.7.6

0 投票
2 回答
2437 浏览

python - python的`unittest.mock.patch`会改变全局状态吗?

我正在尝试确定 Python 的mock.patchunittest.mock.patch在 Py3 中)上下文管理器是否会改变全局状态,即它是否是线程安全的。

例如:让我们想象一个线程使用上下文管理器在函数bar内修补函数foo,然后在上下文管理器内部,解释器暂停该线程(由于 GIL 等)并恢复另一个foo在所述上下文管理器之外运行的线程。如果patch是线程安全的,我希望函数的全局状态foobar未修改,因此第二个线程将获得foo. 但是如果patch修改全局状态,第二个线程将获得修改后的行为,foo即使它不在上下文管理器中。

我参考了源代码,但仅通过查看无法清楚地分辨出来。

0 投票
1 回答
204 浏览

python - 如何模拟内部调用(xlwt)?

我有一个这样的测试用例:

实际方法进行一些处理并将结果保存在 Excel 电子表格中。

看来我的模拟补丁没有接管 workbook.save()。请问我错过了什么?

0 投票
1 回答
166 浏览

python - 尝试使用 `assert not mock.method.called` 时出错

我试图断言没有使用 Python Mock 调用方法。不幸的是,我似乎无法克服这个错误:

我正在为我的测试运行 Python 2.7.1 和 Python Mock 0.1.0。谷歌说:No results found for "AttributeError: MockCallable instance has no attribute 'called'".我该如何解决这个错误?

这是测试:

0 投票
1 回答
3615 浏览

python - 只有特定参数的 Python 模拟函数

我是 Python 新手,只有在传递特定参数时才尝试模拟函数。如果传递的不是所需的参数,我想调用原始函数。

在 Python 2.7 中,我尝试过这样的事情:

它不起作用,因为original_config不是config. 它引用了相同的模块,最终进入无限循环。我可以尝试克隆原始config模块,但这似乎有点过头了。

有没有类似于我可以使用的 RSpec 模拟的东西?例如:

obj.stub(:message).with('an_expected_argument').and_return('a_mocked_result')

任何帮助,将不胜感激。谢谢。

0 投票
1 回答
2009 浏览

python - 来自其他模块的模拟功能

我有两个 python 文件:

函数.py:

和嘲笑.py:

我想模拟 func,但没有积极的结果。我有 AssertionError: 'string' != 20。我应该怎么做才能正确模拟它?如果我做 mock.patch ('func') 我有 TypeError: Need a valid target to patch。你提供了:'func'。如果我将 func 移动到 mocking.py 并调用 foo: function.foo() 它可以正常工作。但是当我不想将函数从 function.py 移动到 mocking.py 时怎么办?