- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以有Mock
对象在调用时返回一个值并在调用时执行一条语句?例如这个:
> mocked_func = Mock(return_value='Returned foo',
side_effect=lambda: print('Side effect executed')
)
> print(mocked_func())
Side effect executed
None
这里的文档似乎有点含糊,但在我看来,当 side_effect
时使用,则 return_value
被完全忽略,仅 side_effect
的结果返回函数(在 print()
的情况下是 None
)。
由于 Python 并不真正支持多语句 lambda(据我所知,您能做的最好的事情就是将表达式放入一个元组中,但随后将返回整个元组) - 是否可以组合两个参数?
我想避免必须定义一个新函数并将其用作 side_effect
,我觉得两者都在 Mock
中声明过更干净。
最佳答案
“是否可以让 Mock
对象在调用时返回一个值并在调用时执行一条语句?”显然是的,只需让 side_effect
完成所有操作即可:
import unittest.mock as mock
def side_effect():
print('Side effect executed')
return 'Returned Foo'
mocked_func = mock.Mock(side_effect=side_effect)
print(mocked_func())
# output
Side effect executed
Returned Foo
当然你也可以使用 lambda 来做到这一点:
import unittest.mock as mock
mocked_func = mock.Mock(
side_effect=lambda: (print('Side effect executed'), 'Returned Foo')[1]
)
print(mocked_func())
# output
Side effect executed
Returned Foo
对我来说,它看起来并不干净,但对每个人来说,它看起来并不干净。如果您只是想避免污染您的 namespace ,您可以这样做:
def mocked_func():
print('Side effect executed')
return 'Returned Foo'
mocked_func = mock.Mock(side_effect=mocked_func)
或者使用装饰器:
def mock_it(f):
return mock.Mock(side_effect=f)
@mock_it
def mocked_func():
print('Side effect executed')
return 'Returned Foo'
正如您已经注意到的那样,将 return_value
和 side_effect
结合起来似乎是不可能的。
关于python - unittest.Mock - 结合 return_value 和 side_effect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47176726/
考虑以下(非常简单的)单元测试文件: import unittest from mock import Mock class TestMuPE(unittest.TestCase): def te
我想知道 RETURN_VALUE 是什么意思!我被这件事困住了。如何在 SQL Server 存储过程中使用 RETURN_VALUE?谢谢.. ASP: Set cmdDB = Server.Cr
我有一个 Python 文件 a.py,其中包含两个类 A 和 B。 class A(object): def method_a(self): return "Class A
我有一个函数可以确定是否可以从环境变量或 Google Cloud Secret Manager(通过自定义类)中提取 token 。 我正在模拟 secret 管理器连接类,因此它实际上并没有连接到
使用时patch.object为了模拟一个方法,有没有办法指定对于某些参数值,该方法将运行,因为它根本没有被模拟,并且将返回“真实的”return_value,并且对于其他参数值设置特定的 retur
我会先贴出一些代码,这样更清楚。 我的类(class): from tools import get_knife, sharpen class Banana(object): def chop
我第一次尝试创建 PHP 扩展。我需要一个返回关联数组的函数。所以出于测试原因,我创建了一个小函数: PHP_FUNCTION(testing_array) { char *firstVal
我正在尝试将 MagicMock 上的实例方法的可调用更改为 PropertyMock,因为这就是访问它的方式(Django 模型列)。但测试失败了 _mock_self = 给出以下代码 # v
我想将存储过程中的日志记录和状态消息返回到调用它的 TASK。 create or replace procedure status_return() returns string not nul
是否可以有Mock对象在调用时返回一个值并在调用时执行一条语句?例如这个: > mocked_func = Mock(return_value='Returned foo',
这是示例测试: import a import b import c import mock from django.test import TestCase @mock.patch.object(a
为了测试一个轮询函数,我想模拟一个子函数的调用,这样第一次调用它就会失败,第二次调用它就会成功。这是它的一个非常简化的版本: poll_function(var1): value = sub_
背景 我有一个任务类型可以co_return和 co_yield . 在 LLVM 中,该任务按预期工作并通过了一些早期测试。在 MSVC 和 GCC 中,代码以相同的方式失败(巧合?)。 简要问题
已更新 Segmentation fault是由尝试引起的 .get()在无效 std::future .然而协程仍然不能正常工作。 [ godbolt ] [ wandbox ] 我有这样的等待类型
VS2019最新的c++编译器。 错误是:“协程的 promise 必须声明‘return_value’或‘return_void’” 示例摘自 David Mazières https://www.
我是一名优秀的程序员,十分优秀!