- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 Python 文件 a.py
,其中包含两个类 A
和 B
。
class A(object):
def method_a(self):
return "Class A method a"
class B(object):
def method_b(self):
a = A()
print a.method_a()
我想通过模拟 A
在类 B
中对 method_b
进行单元测试。以下是用于此目的的文件 testa.py
的内容:
import unittest
import mock
import a
class TestB(unittest.TestCase):
@mock.patch('a.A')
def test_method_b(self, mock_a):
mock_a.method_a.return_value = 'Mocked A'
b = a.B()
b.method_b()
if __name__ == '__main__':
unittest.main()
我希望在输出中得到 Mocked A
。但我得到的是:
<MagicMock name='A().method_a()' id='4326621392'>
我哪里做错了?
最佳答案
当您@mock.patch('a.A')
时,您正在将待测代码中的类A
替换为mock_a
。
然后在 B.method_b
中设置 a = A()
,现在是 a = mock_a()
- 即 a
是 mock_a
的 return_value
。由于你没有指定这个值,它是一个普通的 MagicMock
;这也没有配置,所以在调用方法时会得到默认响应(又一个 MagicMock
)。
相反,您想配置 mock_a
的 return_value
以具有适当的方法,您可以这样做:
mock_a().method_a.return_value = 'Mocked A'
# ^ note parentheses
或者,也许更明确地说:
mock_a.return_value.method_a.return_value = 'Mocked A'
您的代码在 a = A
(分配类,而不是创建实例)的情况下可以工作,因为那时 a.method_a()
会触发您的模拟方法。
关于Python 返回 MagicMock 对象而不是 return_value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199008/
考虑以下(非常简单的)单元测试文件: 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.
我是一名优秀的程序员,十分优秀!