问题标签 [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 回答
2371 浏览

python - 如何对使用 unittest.mock 调用的 django 模型方法进行单元测试?

我很难理解如何使用unittest.mock库。
我有这个模型:

我想测试_set_password当我这样做时调用的那个data = Data(password='password')
我手动确认它被调用了,但是这个单元测试失败了(我从 unittest.mock 文档的例子中得到):

使用此消息:

我做错了什么?

0 投票
2 回答
149 浏览

python - 我无法模拟工作

我正在尝试使用模拟来使用 Python/Django 进行单元测试,但我无法让它工作。模拟的行为就像它从未被调用过一样。

测试.py

my_library.py

模型.py

我的库有效,我知道函数 add 被正确调用。但是模拟似乎不起作用,因为它只是在我运行单元测试时引发异常:

我想我没有正确使用模拟的东西。任何人都可以帮助或提供建议吗?

0 投票
1 回答
117 浏览

python - 模拟从未调用

我试图在我的单元测试中实现一个模拟,但它从未被调用,即使它应该。

测试.py

模型.py

我的文件.py

当我运行单元测试时,它只是告诉我没有调用模拟,虽然它应该是,我知道脚本工作正常。你对我有什么想法/建议吗?

0 投票
1 回答
261 浏览

python - 访问 @classmethod 中的修补对象

我想在TestCase.setUpClass()方法中为修补对象设置副作用,以便副作用将在整个测试中持续存在,而不必通过setUp().

如何访问 中的补丁@classmethod

我想做的一个例子setUpClass()

0 投票
5 回答
4124 浏览

python - Python 模拟库:有没有办法从魔术模拟调用中获取相应的返回值?

在使用库编写 Python 测试时mock,我经常会得到这样的“调用方法的参数”,

(这将打印m called with: [call(4)])。问题:有没有办法获得返回值(在这种情况下,16)?

详细信息:在我的特定场景中,我想使用 side_effect 返回一个子模拟对象:内省该对象以查看对其调用的内容很重要。例如,“真实代码”(非测试代码)可能会这样写,

Usingside_effect似乎是一种返回新子模拟对象的便捷方式,但也可以保留call_args_list. 但是,商店似乎没有MagicMockside_effect函数返回值……我错了吗?

0 投票
1 回答
653 浏览

python - 使用 mock 模拟导入的模块以测试 Pylons 控制器功能

我一直在寻找实现模拟以测试 Pylons 控制器功能的问题。

我要测试的特定功能可以在这里找到:https ://hg.mozilla.org/build/buildapi/file/efe11511f42d/buildapi/controllers/selfserve.py#l210

目标:

我只是想模拟出它调用的函数,以便我可以确认它最终会调用 get_completeness。

问题:

我可以模拟 _ok、_get_stable_delay、_failed 和 _branches_cache 就好了。但是当谈到 g.buildapi_cache.get_builds_for_revision 时,我似乎无法正确地模拟它,并且每次调用 revision() 时,它都会失败。

g 实际上是 pylons.app_globals 并被导入 selfserve.py 控制器,如下所示:'from pylons import app_globals as g'

测试:

我正在使用 python 解释器来测试所有这些。这些是我正在尝试的 2 个实现:http: //pastebin.mozilla.org/2931825http://pastebin.mozilla.org/2931832

总而言之,这里是解释器中的完整运行,带有http://pastebin.mozilla.org/2931825的 Traceback

这里是http://pastebin.mozilla.org/2931832

这与我尝试运行修订时遇到的错误相同。每次它在这里出错是因为我试图模拟这个 app_globals 模块失败了,或者看起来是这样。我真的不确定如何尝试这个。有没有人有任何想法?

这里有一些更好的细节:

注1

我已经查看了以下似乎不太适用于这个特定场景的线程,或者我完全错过了这一点。

0 投票
4 回答
11117 浏览

python - 模拟单元测试的 default=timezone.now

我正在尝试为执行大量日期时间操作的 django 应用程序编写单元测试。我已经为我的测试安装了猴子补丁 django 的模拟。timezone.now

虽然我能够在timezone.now正常调用它时成功模拟(实际上是timezone.now()在我的代码中调用,但我无法为使用DateTimeFieldwith创建的模型模拟它default=timezone.now


我有一个User包含以下内容的模型:


我的单元测试如下所示:


assertEquals(user.modified, dt)通过,但assertEquals(user.timestamp, dt)没有。

我如何模拟timezone.now以便即使default=timezone.now在我的模型中也会创建模拟时间?


编辑

我知道我可以更改我的单元测试以通过timestamp我的选择(可能由 mocked 生成timezone.now)...很好奇是否有一种方法可以避免这种情况。

0 投票
1 回答
254 浏览

python - patch 不会替换目标对象,但会正确返回它

当我调用 mock.patch 时,我希望它用我使用 new 关键字参数提供的类型替换我正在替换的类型。
它不会替换类型,但在patch.start()调用时会返回正确的对象。
FakesPatcher是一种强制旧对象创建新对象的技巧。它适用于Python 3.xPyPy但是,它不适用于 Python 2.x(见下面的编辑)。无论如何,
我希望它消失并使用。FakesPatchermock.patch

我在这里做错了什么,我该如何解决?

如果您想使用代码并对其进行测试,您可以在此处找到它。

编辑:
我通过用实例方法替换 lambda解决了 Python 2.x 错误。

0 投票
1 回答
2033 浏览

python - 一种模拟松散定义的 Python dict 对象的简单方法

有没有一种简单的方法可以在 Python 中模拟松散定义的 dict 对象?例如,给定一个字典,我如何轻松表达input,我如何轻松表达,我想检查其中的每个值是否符合特定的元定义,如最小值和最大值、长度和类型?

能够做到这一点可能很方便,例如,在编写测试时。

模拟( Python 3.3+ 版本中的unittest.mock)中,可以指定一个值可以是ANY值,就像在

但是,如果bar上面应该是一个类似字典的对象,比如

0 投票
1 回答
15635 浏览

python - 仅模拟对象上的单个方法

我熟悉其他语言的其他模拟库,例如 Java 中的 Mockito,但是 Python 的mock库让我感到困惑。

我有以下课程要测试。

在我的测试中,我想确保在执行submethodmain_method调用了它并且使用正确的参数调用了它。我不想submethod跑,因为它会做危险的事情。

我完全不确定如何开始。Mock 的文档非常难以理解,我不确定要模拟什么或如何模拟它。

我怎样才能模拟该submethod功能,同时main_method单独保留该功能?