问题标签 [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.
python - 如何对使用 unittest.mock 调用的 django 模型方法进行单元测试?
我很难理解如何使用unittest.mock
库。
我有这个模型:
我想测试_set_password
当我这样做时调用的那个data = Data(password='password')
。
我手动确认它被调用了,但是这个单元测试失败了(我从 unittest.mock 文档的例子中得到):
使用此消息:
我做错了什么?
python - 我无法模拟工作
我正在尝试使用模拟来使用 Python/Django 进行单元测试,但我无法让它工作。模拟的行为就像它从未被调用过一样。
测试.py
my_library.py
模型.py
我的库有效,我知道函数 add 被正确调用。但是模拟似乎不起作用,因为它只是在我运行单元测试时引发异常:
我想我没有正确使用模拟的东西。任何人都可以帮助或提供建议吗?
python - 模拟从未调用
我试图在我的单元测试中实现一个模拟,但它从未被调用,即使它应该。
测试.py
模型.py
我的文件.py
当我运行单元测试时,它只是告诉我没有调用模拟,虽然它应该是,我知道脚本工作正常。你对我有什么想法/建议吗?
python - 访问 @classmethod 中的修补对象
我想在TestCase.setUpClass()
方法中为修补对象设置副作用,以便副作用将在整个测试中持续存在,而不必通过setUp()
.
如何访问 中的补丁@classmethod
?
我想做的一个例子setUpClass()
:
python - Python 模拟库:有没有办法从魔术模拟调用中获取相应的返回值?
在使用库编写 Python 测试时mock
,我经常会得到这样的“调用方法的参数”,
(这将打印m called with: [call(4)]
)。问题:有没有办法获得返回值(在这种情况下,16
)?
详细信息:在我的特定场景中,我想使用 side_effect 返回一个子模拟对象:内省该对象以查看对其调用的内容很重要。例如,“真实代码”(非测试代码)可能会这样写,
Usingside_effect
似乎是一种返回新子模拟对象的便捷方式,但也可以保留call_args_list
. 但是,商店似乎没有MagicMock
从side_effect
函数返回值……我错了吗?
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/2931825和http://pastebin.mozilla.org/2931832
总而言之,这里是解释器中的完整运行,带有http://pastebin.mozilla.org/2931825的 Traceback
这里是http://pastebin.mozilla.org/2931832
这与我尝试运行修订时遇到的错误相同。每次它在这里出错是因为我试图模拟这个 app_globals 模块失败了,或者看起来是这样。我真的不确定如何尝试这个。有没有人有任何想法?
这里有一些更好的细节:
- 这是我试图使用的函数,它在我正在实例化的类中:https ://hg.mozilla.org/build/buildapi/file/efe11511f42d/buildapi/controllers/selfserve.py#l210
注1
我已经查看了以下似乎不太适用于这个特定场景的线程,或者我完全错过了这一点。
python - 模拟单元测试的 default=timezone.now
我正在尝试为执行大量日期时间操作的 django 应用程序编写单元测试。我已经为我的测试安装了猴子补丁 django 的模拟。timezone.now
虽然我能够在timezone.now
正常调用它时成功模拟(实际上是timezone.now()
在我的代码中调用,但我无法为使用DateTimeField
with创建的模型模拟它default=timezone.now
。
我有一个User
包含以下内容的模型:
我的单元测试如下所示:
assertEquals(user.modified, dt)
通过,但assertEquals(user.timestamp, dt)
没有。
我如何模拟timezone.now
以便即使default=timezone.now
在我的模型中也会创建模拟时间?
编辑
我知道我可以更改我的单元测试以通过timestamp
我的选择(可能由 mocked 生成timezone.now
)...很好奇是否有一种方法可以避免这种情况。
python - patch 不会替换目标对象,但会正确返回它
当我调用 mock.patch 时,我希望它用我使用 new 关键字参数提供的类型替换我正在替换的类型。
它不会替换类型,但在patch.start()
调用时会返回正确的对象。
这FakesPatcher
是一种强制旧对象创建新对象的技巧。它适用于Python 3.x和PyPy。但是,它不适用于 Python 2.x。(见下面的编辑)。无论如何,
我希望它消失并使用。FakesPatcher
mock.patch
我在这里做错了什么,我该如何解决?
如果您想使用代码并对其进行测试,您可以在此处找到它。
编辑:
我通过用实例方法替换 lambda解决了 Python 2.x 错误。
python - 一种模拟松散定义的 Python dict 对象的简单方法
有没有一种简单的方法可以在 Python 中模拟松散定义的 dict 对象?例如,给定一个字典,我如何轻松表达input
,我如何轻松表达,我想检查其中的每个值是否符合特定的元定义,如最小值和最大值、长度和类型?
能够做到这一点可能很方便,例如,在编写测试时。
在模拟( Python 3.3+ 版本中的unittest.mock)中,可以指定一个值可以是ANY
值,就像在
但是,如果bar
上面应该是一个类似字典的对象,比如
python - 仅模拟对象上的单个方法
我熟悉其他语言的其他模拟库,例如 Java 中的 Mockito,但是 Python 的mock
库让我感到困惑。
我有以下课程要测试。
在我的测试中,我想确保在执行submethod
时main_method
调用了它并且使用正确的参数调用了它。我不想submethod
跑,因为它会做危险的事情。
我完全不确定如何开始。Mock 的文档非常难以理解,我不确定要模拟什么或如何模拟它。
我怎样才能模拟该submethod
功能,同时main_method
单独保留该功能?