问题标签 [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.
python - 模拟一系列相互依赖的调用
我有一种方法可以抓取网页并将数据保存到文件中(参见下面的示例代码)。我需要测试生成的数据是否格式正确。
问题是,数据是从一系列调用中接收的,并且进一步的调用使用之前调用的结果。更糟糕的是,所涉及的许多调用都是在具有不同参数的相同对象(a Webdriver
、aWebDriverWait
和expected_conditions
模块)上完成的。
我看到unittest.mock.Mock
可以mock一个简单调用的结果,或者一系列简单调用的结果,但是看不出怎么实现这样纠结的东西。我看到的唯一方法是手动重新实现该方法进行的每个调用,并将我在该方法中传递的参数复制到这些实现中,以便他们知道每次调用要返回什么。并为所有其他测试用例再次执行此操作。这听起来绝对是编写和维护的噩梦:代码比测试本身多几倍,并且与代码接近 1:1 重复。所以我拒绝继续,直到有人告诉我有更好的方法或证明没有更好的方法并且每个人都真的这样做(我不相信)并且例如每次页面上的标签更改时重写所有测试(这是一个实现细节,所以通常,它应该
示例代码(适用于http://example.com):
python - Python模拟“嵌套”构造函数调用
我正在努力模拟一个由“过程”函数调用的对象方法中的构造函数调用。
为了更好地理解这里是我的代码作为一个简短的版本:
文件 ./src/b/lambda_function.py:
文件 ./src/b/oee_retriever.py:
现在我只想测试这个函数,lambda_function.handler()
我想模拟构造函数调用OeeRepo()
oee_retriever.__init__()
我试过了:
模拟的结果应该是 'nope' 但oee_repo.do()
调用的是真正的函数。我也尝试使用@patch('src.b.oee_retriever.OeeRepo')
,但oee_repo.do()
在这种情况下也调用了。
如何模拟OeeRepo()
构造函数调用?
python - Python - 如何断言没有使用特定参数调用模拟对象?
我意识到unittest.mock
对象现在有一个assert_not_called
可用的方法,但我正在寻找的是一个assert_not_called_with
. 有这样的吗?我在谷歌上查看并没有看到任何东西,当我尝试使用mock_function.assert_not_called_with(...)
它时引发了一个AttributeError
,这意味着该函数不存在该名称。
我目前的解决方案
这很有效,但如果我有几个这样的调用,我想打乱代码。
有关的
python - 如何在python中模拟一个包中的一个模块
TL;DR:如何从 python 包中模拟单个模块
详细说明:
我们正在使用基于 Beaglebone black 的自定义板,并且我们有不同的 git 存储库,其中包含不同的 python 脚本/模块。现在在大多数存储库中,我们维护脚本/模块的单元测试,并且无论脚本/模块依赖于其他模块,我们都会模拟该模块。
在编写 unittest 时,我遇到了一个问题,即我有一个包,其中存在一个模块,而另一个模块是从不同的 repo 复制的,同时创建了交叉编译的 rfs。
问题描述
我已经创建了示例模块结构,我如何在我的原始项目中使用它。
在上述结构中
- orig_script.py : 主脚本
- test_orig_file.py :主脚本的单元测试文件
- tools : 包含不同包的包目录,例如
hello
和hi
- mock_hi.py :从工具包中模拟一个 hi 包。
orig_script.py 的内容
test_orig_file.py 的内容
mock_hi.py 的内容
tools/hello.py 内容如下
当我运行 unittest 时,出现以下错误
有什么建议/更正/指针让它工作吗?
python - 如何使用 python unittest 在模拟对象中模拟列表?
我正在尝试从 Mock 对象返回一个列表,但无法使其正常工作。
那是代码:
这是我尝试过的测试:
结果:
我不知道如何使 result[0] 工作。'execute_call' 应该是模拟的,但 return_value 需要是一个列表。
任何想法都值得赞赏。
python - 使用 mock.patch 和 mock_open 模拟包含 JSON 数据的文件
我正在尝试测试一种需要json.load
在 Python 3.6 中使用的方法。经过几次尝试,我尝试“正常”运行测试(使用 CLI 中的通常 unittest.main() ),并在 iPython REPL 中运行。
具有以下功能(为了示例的目的而简化)
通过以下测试:
测试文件的执行结果令人心碎:
在命令行中执行相同的操作时,会给出成功的结果。
我尝试了几种方法(使用with
, 作为装饰器进行修补),但我唯一能想到的就是unittest
库本身,以及它可能会做什么来干扰模拟和修补。
还检查了 virtualenv 和 ipython 中的 python 版本,即json
库的版本。
我想知道为什么看起来相同的代码在一个地方工作而在另一个地方不起作用。或者至少是一个指向正确方向的指针,以了解为什么会发生这种情况。
python - 如何在模拟基类时为子类编写单元测试?
我想在模拟 Base 时为 Subclass 编写测试,因为 Base 来自外部库。鉴于我们修改了基类中的所有可调用对象,我该如何模拟它。
python - 模拟静态方法调用的模块函数不起作用
好的,所以我有一系列 Python3 代码,如下所示:
foo.py
酒吧.py
现在我写一个这样的单元测试:
test_foo.py
问题:
运行测试会导致 FileNotFoundError,这意味着它mock.patch("bar.baz")
不起作用。
我该如何解决这个问题,以便baz()
正确地模拟函数?
python-3.x - Python - 在内部实例化另一个类的模拟类初始化
我有以下python文件board.py:
我正在创建这个 test_file:
但是我得到了 FileNotFoundError 因为 Aux.___init____() 调用了一个 self.foo.method() 来打开一个文件并从中读取。有没有办法模拟 self.foo.method() 或 Aux 类?
python - 当 python 模拟同时具有返回值和副作用列表时会发生什么?
我无法理解某些测试代码中发生了什么。它看起来像这样:
我知道:
side_effect
是一个在调用 mock 时调用的函数- 但如果
side_effect
是可迭代的,那么“对模拟的每次调用都将返回可迭代的下一个值”(感谢pytest docs) - 文档还说,如果传递给的函数
side_effect
返回DEFAULT
,那么模拟将返回它的正常值return_value
但这是我不明白的:
- 当我同时提供副作用列表和 返回值时会发生什么?
- 我应该期望在每次调用时看到
MyClass.method_to_call_thrice
什么?