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

python - 如何使用 PropertyMock 在 pytest 单元测试中返回请求响应属性?

我将pytest-mock 包装器与 pytest 一起使用。

我无法让 PropertyMock 与requests 包一起工作。

这是我尝试进行单元测试的函数示例:

这是我在单元测试中的尝试:

测试失败,因为 200 没有返回response.status_code

我尝试在调用后放置一个 PDB 断点requests.get(),并自己在 PDB 中检查了 response.status_code 属性。我得到一个 MagicMock 对象:

0 投票
0 回答
44 浏览

python - 我如何修补方法并返回 pytest 中的传入参数?

我对 pytest 模拟补丁有疑问。我不知道如何修补执行原始 SQL 的方法。

我有获取结果的通用方法。

如何在项目中使用:

在测试用例中,我想从执行器获取原始查询字符串并将其与一些示例进行比较

一般来说,我想在测试用例中从 executor 获取传入的参数

我正在使用 pytest 和 django_db

我怎么能这样做?

0 投票
1 回答
198 浏览

python - 不能将 attach_mock 与 autospec 函数模拟一起使用

库模块:

测试模块:

mocker夹具来自插件pytest-mock。使用执行MCVEpython -m pytest

由于奇怪的 原因,该测试失败了。

没有autospec它可以工作。使用 autospec 会破坏该attach_mock功能吗?应该如何在不丢失它们的 autospec 的情况下对依赖调用的 order和argsfoo进行assert测试?bar1bar2

0 投票
1 回答
238 浏览

python - 为了单元测试的目的,如何修补 Python 的 raise(或 return)关键字?

mock.patch 能够捕获的 Python 关键字的命名空间是什么?

当有人想打补丁打开或打印然后mock.patch("builtins.open")mock.patch("mymodule.open")可以使用,但这不起作用,例如,使用raise.

如果我有raise somemodule.SomeException声明,那么我可以很容易地测试是否引发了异常,但是我如何断言实际上已经调用了 raise 关键字。pytest喜欢(在和的帮助下pytest-mock):


编辑:我有一个很好的答案,所以 mock.patch 不适用。除此之外,除了明显的解决方案(测试结果)之外,是否还有其他有意义的技术来测试代码中是否调用了Python 关键字 ( raise, , ...)?return

编辑 2:我想测试的实际代码(pynput 的 Listener stop() 在 Xfce 中不能正常工作,所以我必须引发异常来停止 Listener 线程):

编辑 3: 上面的方法使用以下两种测试方法进行了单元测试:

0 投票
1 回答
823 浏览

python - 来自另一个文件/模块的 Python 模拟补丁

我有一个按预期工作的模拟。

但如果我将我的 second() 方法移动到另一个文件,则不会......

我得到了同样的错误: AssertionError: Expected 'second' to have been called once。调用 0 次。

我在这里想念什么?

我尝试了几种不同的格式化方式,但似乎都没有。在这种情况下,这甚至是单元测试的最佳实践/包吗?

0 投票
2 回答
4002 浏览

python-3.x - pytest - 在构造函数中模拟构造函数

全部,

我有一堂类似的课。

如何Bar使用 pytest / pytest-mock 模拟构造函数?我尝试了以下失败。

0 投票
2 回答
873 浏览

python - pytest-mock 模拟自我方法

我正在尝试使用 pytest-mock 来模拟 self 方法。

只是我的班级有一个我想模拟的函数“距离”。

我想测试我的eq函数,如下所示:

我尝试这样的事情:

但是这个回报:

AssertionError: assert <\MagicMock spec='Interval' id='140333310434384'> ==<\MagicMock spec='Interval' id='140333310558104'>

我也试过

但这让我得到了一个 AttributeError,正如我对 MagicMock 所期望的那样。

修补我的对象自我方法的正确方法是什么?

0 投票
1 回答
1358 浏览

python - Pytest 模拟通过 yield 返回的对象并检查该对象的方法是否被调用

我有一段代码需要通过 pytest 进行测试

我需要检查 some_method 是否已被调用。我曾经pytest-mock模拟 some_generator 方法以返回 aMagicMock并使用该对象来检查该方法是否被调用。但它返回错误。我分配的返回值也没有反映到some_method

即使gen.some_method(value)调用了,测试也总是失败。

0 投票
1 回答
222 浏览

python - 无法使用 pytest 模拟异常

我似乎无法测试 getopt 异常。这里有一个非常简化的例子(主文件):

我试图引发 GetoptError 异常的测试文件在这里(测试文件):

不幸的是,没有引发异常。测试返回:

谁能指出我错过了什么?谢谢你。

0 投票
1 回答
2835 浏览

python - pytest-mock 补丁上下文管理器在退出时不恢复对象

我们最近从 unittest 切换到 pytest。我在mocker.patch用作上下文管理器时遇到了一个奇怪的问题。考虑以下示例。

module_a.py

module_b.py

test_module_b.py

我希望一旦上下文管理器退出,MyClass 的 value 方法方法将被恢复(返回值为 10),但是测试在第二个断言语句上失败并出现断言错误20 != 10如果我使用完全相同的测试,但替换mocker.patchunittest.mock.patch,它通过。我认为 pytest-mock 与 unittest.mock 共享相同的 API,所以我对为什么会有差异感到困惑。