问题标签 [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 投票
2 回答
111 浏览

python - 根据输入模拟函数内的 API 调用

假设有一个功能,除其他任务外,它会进行一些 api 调用。有没有办法在测试此函数时模拟所有 api 调用并根据输入指定调用的返回值。例如,假设您要测试的功能是这样的:

我想测试 someFunction 并指定,每次调用 someApiCall 时,不要执行该函数,只需根据该函数的输入返回一个值。例如,如果我正在处理时间,我希望 api 调用根据特定时间返回特定值,否则返回 noop 值。怎么能做到这一点?

0 投票
0 回答
1342 浏览

pytest - 如何模拟 sqlalchemy.engine.cursor.LegacyCursorResult?

我有以下类连接到我的项目中的 MSSQL Server 实例,

我想模拟该方法

get_result_tuple

返回“transaction_id”和 sqlalchemy.engine.cursor.LegacyCursorResult 的实例。

如何模拟 sqlalchemy.engine.cursor.LegacyCursorResult 并在 ResultProxy 对象上返回一些虚拟数据?

调用者有以下代码,

请指教。

0 投票
3 回答
2276 浏览

python - 如何模拟对 secretsmanager 的 boto3 客户端会话请求以返回特定响应或引发异常

给定如下代码:

我如何模拟 client.get_secret_value("some-value")返回一些值

以及如何模拟它以引发异常

0 投票
1 回答
63 浏览

python - 模拟嵌入在某些对象中的 API 调用并根据对象内的输入改变行为

这是此处提出的 SO 问题的延续,但模式比最初要求的更复杂。我的主要目的是尝试根据传递给调用者的值来模拟 API 调用。API 调用不知道传递给其调用者的值,但需要提供正确的行为,以便可以对调用者进行全面测试。我正在使用时间来确定我想要的行为。

给定一个对象:

由另一个具有入口点代码的对象创建:

我怎样才能让 someApiCall 根据time参数进行更改?

这是一个示例测试用例

测试用例没有得到我想要的结果(它返回一个函数指针)。

0 投票
2 回答
576 浏览

python - Python unittest:模拟从类对象调用的外部库函数

您好,我有以下代码;

我正在尝试测试 file_a 中的加载函数;下载是我导入的外部模块中的功能

file_a.py

我写了这样的测试

test.py

但似乎 bar 对象没有调用模拟下载,而是调用了导入的下载。我怎样才能解决这个问题并使我的测试通过?

0 投票
1 回答
5717 浏览

python - Using pytest-mock to mock objects and object methods

I'm trying to use pytest-mock for mocking. This library is essentially a plugin/wrapper for mock and patch.

My problem is defined as:

I have an application (mymodule.py) that uses SQL Alchemy. Basically, there's a function that defines some objects from SQL Alchemy and returns a dictionary with those objects.

Then, a second function takes that output dictionary as input and uses them:

So now I'm writing unit tests, and I don't want to actually communicate with the real database. So I just need to mock everything sqlalchemy related. So far, I've managed to mock create_engine, MetaData and Table by doing:

That allows me to test some_function1. But now I need to test some_function2, which uses the methods or attributes .insert(), .values and .execute(). How can I patch that?

0 投票
0 回答
33 浏览

django-rest-framework - 如何测试函数是否被端点调用

我正在尝试使用 pytest、mock 和 drf 测试我的函数是否被端点调用。

我在以下视图中覆盖了 create 方法:

我的功能:

我的测试:

但我得到这个错误:

使用调试,在同一个测试中,我知道该函数是由端点调用的。

0 投票
2 回答
1043 浏览

python - Python mock - 修改类属性的模拟类方法

我目前有以下要测试的基本 Python 类:

正如你所看到的, step() 方法包含一个昂贵的 API 调用,所以我想用另一个函数来模拟它,避免昂贵的 API 调用但仍然增加self.steps。我发现这样做是可能的(从这里可以看出):

我只是创建了一个mock_step(self)避免 API 调用的函数,并step()用新mock_step(self)函数修补了原来的慢速方法。

然而,这导致了一个新的问题。由于该mock_step(self)函数不是 Mock 对象,因此我无法在其上调用任何 Mock 方法(例如 assert_call() 和 call_count()):

为了解决这个问题,我尝试mock_step使用参数包装一个 Mock 对象wraps

但后来我得到一个不同的错误说mock_step() missing 1 required positional argument: 'self'

因此,从这个阶段开始,我不确定如何断言step()run_steps().

0 投票
1 回答
656 浏览

python - TypeError:super() 参数 1 必须是类型,而不是 MagicMock - azure-devops python 包

我正在使用 azure-devOps python 模块来访问 azure API 以检索一些信息。我已经使用下面的代码来设置建立连接所需的身份验证。

在编写单元测试用例时,我无法模拟 Connection 类,因为它需要 BasicAuthentication 类型的对象。下面是我的单元测试用例:

我收到以下错误:

TypeError: super() 参数 1 必须是类型,而不是 MagicMock

是否有不同的方法来模拟此类或绕过对 API 的身份验证的方法。

0 投票
0 回答
78 浏览

python - 用 pytest-mock 模拟 sqlalchemy.order_by 不会覆盖调用

我的任务是向应用程序添加单元测试,我发现自己需要帮助来设置数据库查询的模拟。

我们有一个模型:

还有一个类 PBCategory 有一堆方法,但我们从第一个开始

在我的conftest中,我有以下固定装置:

这是我们尝试运行的第一个测试:

问题是,无论我如何格式化调用签名(return_value.order_by、return_value.order_by.return_value.all 等),我都会收到以下错误:

我看过这个问题,但它并没有让我走得太远...... 如何在 Flask-SqlAlchemy 中模拟 <ModelClass>.query.filter_by()

任何帮助将不胜感激。