问题标签 [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-3.x - 如何使用 python 的 unittest mock 构建单元测试用例?
基类具有子类继承并调用它们的方法。基类的方法反过来调用 util 类中存在的方法。
我希望拿出一个单元测试套件来测试整个流程,而不仅仅是使用 unittest mock 的单一方法
python - Python unittest.mock:调用了修补类方法但断言失败
我正在尝试模拟实用程序类的几个组件。虽然assert_called()
一种方法可以,但另一种方法失败,但我确信两者都被调用。我在 Windows 10 上运行 Python 3.7.3。
我已经将我的场景简化为基本要素。实用程序类 ( util.py
):
工作正常的单元测试变体:
失败的那个:
运行测试时,我得到两个print()
输出:
所以我确信这两种方法都被调用了。
很可能我犯了一些愚蠢的错误,因为我对python真的很陌生......
更多背景:
在我的精简场景do_something()
中,只是一组函数的替身,这些函数是我的测试对象,而在我的真实场景中,这些函数实际上是在单独的 python 文件中定义的。在生产环境中,它在提供实用程序类 api 的框架的上下文中运行。在我的测试环境中util.py
,它本身就是生产 api 的模拟。要测试的 py 文件(而不是def do_something(): ...
)加载如下:
因此,我无法修改do_something()
测试场景中的代码。
python - 我应该如何测试模拟对象的方法
我有一个关于如何模拟嵌套方法并测试它被调用的问题。我很难理解:https ://docs.python.org/3/library/unittest.mock-examples.html#mocking-chained-calls 。
我想测试一下这个类中的 deploy_file 方法是否调用了 fabric 库中的“put”方法,也许给它赋予了什么值。这是从 AWS 收集一些信息并提供对数据采取行动的方法的模块。
“get_secret”是另一个模块中的一个方法,它使用 boto3 库从 AWS 获取信息。
这些是我正在进行的测试:
其中第二个测试导致“AssertionError:预期的'put'已被调用一次。调用了 0 次。”
第一个测试模拟了“get_secret”函数,以测试“Deploy”的构造函数是否从假 AWS 数据中设置了“Deploy.secrets”。
在第二个测试中,get_secrets 像以前一样被模拟,我模拟了结构库中的“连接”。如果我不模拟 Connection,则会在创建 Connection 对象时收到与“host”参数相关的错误。
我认为当调用“conn.put”时,它会创建一个全新的 Mock 对象,并且在 unittest 运行时我没有测试该对象。我只是不确定如何定义测试来实际测试 put 的调用。
我也是了解要测试什么(以及如何测试)和不测试什么以及如何使用模拟等方面的新手。不过,我完全接受了这个想法。在我从事项目工作时,发现错误和回归非常有帮助。
django - 如何在 django 单元测试中模拟 celery send_task 函数
我想在 Django 中为具有 celery send_task 函数的函数编写单元测试。
我如何在 Django 和模拟 celery 中编写它的 UT?
python - 如何在实例级别模拟 Python 属性?
正如unittest.mock 文档指出的那样:
由于模拟属性的存储方式,您不能直接将 PropertyMock 附加到模拟对象。相反,您可以将其附加到模拟类型对象
但是,我遇到了想在单个测试中模拟多个类实例上的多个属性值的情况。
例如,假设我有一个TimeSlot
带有availability
属性的类:
...而且我有一个帮助类,它按以下方式对TimeSlot
实例列表进行排序availability
:
当我尝试将 Mock(或 PropertyMock)分配给属性时,运行此测试会引发错误availability
:
AttributeError: can't set attribute
有没有办法模拟Python 类的每个实例的属性返回值?
如果没有,我应该以不同的方式来编写这样的单元测试吗?
谢谢!
python - 使用 @patch() 模拟和不使用 side_effect 有什么区别?
我有一个script.py
文件:
和一个test.py
文件:
我可以pytest test.py
从命令行成功运行。
如果我想side_effect
在 my中使用@patch
,我必须做一些不同的事情:
即,我必须:
- 添加一个
test_my_basic_function
我从不使用的参数。 - call
fourth_function
而不是third_function
,因为我不能使用任何类实例变量。
这两种方式打补丁有什么区别?
python - 如何仅针对某些参数模拟对象/方法
我正在编写一个测试,断言使用某些参数调用某个方法。
我有一个方法可以进行一些pandas.Timestamp()
调用,其中一些包括pandas.Timestamp("now")
. 这就是问题出现的地方。
当我修补pd.Timestamp
时,除了“现在”之外,我还为 0-case 修补它。我怎样才能制作一个补丁,使其在pd.Timestamp
所有其他情况下都正常运行pd.Timestamp("now")
?
我试图做一个side effect
功能:
但似乎一旦pd.Timestamp
被修补,这也被修补,所以我得到一个递归错误。
基本上,我想将返回值固定为pd.Timestamp("now")
固定日期,而其他所有内容都正常解析。
编辑:在提问后对示例进行了更改。
stdout - 如何使用 unittest.mock.patch 函数创建一个吞噬 sys.stdout 的装饰器?
我正在尝试为我的单元测试测试函数创建一个 Python Mixin,返回值和sys.stdout
. 我希望 Mixin 有一种方法可以作为装饰器来吞噬sys.stdout
,但到目前为止我还没有成功。
我的自定义装饰器应该:
sys.stdout
被测试函数产生的燕子- 使用
unittest.mock.patch
函数作为装饰器来实现 - 不接受任何输入(保持代码干净)
我对装饰器的尝试:
测试功能示例:
在单元测试中期望使用装饰器:
正如预期的那样,我得到:
因为,我知道mock_stdout
需要在那里,因为unittest.mock.patch
装饰者需要。
python - 在烧瓶和 pytest 中使用 500 状态码模拟响应
*已编辑*
我想测试如果外部 API 返回 500 状态码会发生什么。
我尝试了这段代码,但感觉像无头鸡:
也不HTTPError
接受参数,我如何传递我想要 500 状态码的信息?
python - Python unittest.mock.patch 未按预期工作
我正在尝试测试我创建的向用户发送欢迎电子邮件的功能。但是,要做到这一点,我必须模拟实际发送它的函数(在欢迎电子邮件函数中)。我有以下文件夹结构:
这是我在mail.py中的代码
这是test_mail.py的代码,我正在尝试创建的测试:
参数user是我创建的一个夹具,它正在工作,所以不必担心。
使用pdb调试器,我检查了send_mail函数没有在send_sign_up_mail内部被模拟。