问题标签 [python-unittest.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 回答
3427 浏览

python - 在单元测试中模拟对象时避免类型警告?

假设我有一个函数需要一个复杂的对象并用它做一些事情:

在单元测试bar中将被模拟对象取代,但课程现在会引发类型警告。我应该简单地忽略或抑制这些,还是有适当的方法来处理它们(当然不改变原始函数签名)?

更新:我现在看到这是 mypy 上的一个未解决问题,但它已经处于这种状态超过两年了。有没有就如何解决这个问题达成共识?

0 投票
2 回答
19027 浏览

python - Python SQLAlchemy 模拟

这是我进行链式数据库查询调用的一种方法。

我应该嘲笑DBSession().query(SomeClass).all()。我尝试了一些,但没有任何效果。这是我的试验。

在这次尝试中,如果我尝试打印DBSession(),我会得到一个MagicMock看起来不错的对象。但是当我运行时pytest出现以下错误。

好像我在嘲笑时做错了什么。我的错误是什么?我检查了文档。

0 投票
3 回答
16449 浏览

python - 如何在python中将数据模拟为request.Response类型

我想编写一些测试用例来在 isinstance(obj, requests.Response) 逻辑中练习object_check 。在我创建 Mock 数据作为 requests.post 的返回值之后。模拟数据的类型始终是 Mock 类。这样,我如何重写模拟数据,以便模拟数据可以是 requests.Response 的类型?这样我可以运动行d = obj.json()吗?

0 投票
0 回答
105 浏览

python - 补丁方法在导入时不起作用

我正在尝试模拟模块 dog.py 文件的开头。补丁方法似乎在导入时不起作用,但在以后的调用中起作用。

测试.py

狗.py

猫.py

当调用“from dog import Dog”时,Cat 不是模拟类而是真正的类。但是,当调用“dog = Dog("a dog")”时,Cat 就是模拟对象。

为什么导入模块时 Cat 不是 mock?

0 投票
0 回答
70 浏览

python - Python方法:在一个单元测试中执行多个IP?最佳做法?

细节

对于更大的单元测试,我需要 Python 中的一种方法,它允许服务器/交换机/路由器调用 IP 并相应地响应测试。

我在这方面的想法:

  • 从 CSV 文件中读取 IP

  • 创建一个配置文件,我在其中输入所有相关数据。

设置

测试设置

所以我需要什么:

如何在 Python 中编写一个允许我为测试运行多个 IP 的方法?

这值得一个配置脚本吗?

在此示例中,您将看到我正在运行的测试。

通过上述设置调用各个测试,但一次仅根据一台设备调用。那么如何扩展它以便我可以同时调用各种 IP 呢?

0 投票
0 回答
249 浏览

python - 单元测试模拟/覆盖套接字的发送

[编辑:这个问题只存在于 Python 2.7。使用 3.7 它可以按预期工作。任何想法可能有什么区别,以及是否有可能使它也适用于 2.7,由于某些原因我必须使用它]

我想sendto使用 Mock 覆盖套接字的方法。我的第一种方法是这样的:

但是,这导致了异常:

AttributeError:“_socketobject”对象属性“sendto”是只读的。

这种方法适用于其他类,但不适用于套接字。我接受它,原因是__init__为所有成员函数调用 setattr,如下所示:

然后,我尝试了另一种方法:

这行得通,但是,调用参数列表只给了我:

对应于构造函数AF_INET=2SOCK_DGRAM=2。没有我调用的痕迹sendto。我的解决方法是使用从mock_sendto函数中设置的全局变量。不过,不是很优雅。

我有三个问题:

  1. 我可以解决“只读”问题并获得最初的工作方法吗?
  2. 为什么all_args_list只跟踪构造的调用而不跟踪 sendto 的调用?
  3. 有比使用全局变量更好的方法吗?

提前感谢您的回答!

0 投票
1 回答
1168 浏览

python - Python模拟打开并检查关闭

我正在尝试模拟 open 并想检查 close 是否至少被调用一次

到目前为止,这是我的工作测试代码,现在我想另外检查是否调用了 close 方法我试图添加

mock_file.close.assert_called_once()

但两者都不会捕获方法调用。

0 投票
2 回答
5144 浏览

python - Python中的连接单元测试

我是 Python 单元测试的新手,我不确定如何创建一个返回连接的函数的单元测试?

0 投票
1 回答
91 浏览

python - 在 Mock 对象上使用方法

我有一个用于从另一个非常简单的服务获取信息的对象。由于对象很简单并且初始化方法可以很容易地修补,我想我会尝试编写我的代码以实现超级可重用和可扩展。但是,唉,我不知道如何使它工作。下面的代码是相当不错的 sudo 代码,并且非常简化,但它应该明白这一点。

然后我有一个请求处理程序对象,它通过 get_client() 初始化客户端(见下文)

然后请求处理程序上的一个方法使用不同参数的 client.read() 方法几次(第二个取决于第一个)。

对于我的测试,我认为我可以“修补”get_client 方法以返回我自己的简单对象,然后可以“定期”使用该对象并消除对第三方服务的依赖,并实际使用从方法执行中检索到的值。我很失望地发现它不是那么容易和干净。测试模式如下所示。

我已经看到在哪里可以模拟实际 client.read() 的响应以返回带有列表的多个值。但这似乎我会做大量的复制和粘贴,并且必须为每个小测试一遍又一遍地做同样的事情。如果这很简单,请原谅我,遗憾的是我只是在学习测试的艺术。有没有办法完成我想做的事情?也许我缺少一些超级简单的东西。或者,也许我只是无缘无故地走错了路。帮助?!

0 投票
1 回答
37 浏览

python-3.x - unittest.mock:如何模拟两个方法调用?

我如何通过对同一方法的两次调用来模拟 datetime.datetime.now?

下面我试过: