python - 当我无权访问实例本身时,如何设置模拟类实例的 return_value?
问题描述
假设我有一些函数A.foo()
实例化并使用 的实例B
,并在其上调用成员函数bar
。
鉴于我无权访问 的实例,如何在我测试我的类时设置return_value
一个模拟实例?也许一些代码会更好地说明这一点:B
A
B
import unittest
import unittest.mock
import pandas
class A:
def foo(self):
b = B()
return b.bar()
class B:
def bar():
return 1
@unittest.mock.patch("__main__.B")
class MyTestCase(unittest.TestCase):
def test_case_1(self, MockB):
MockB.bar.return_value = 2
a = A()
self.assertEqual(a.foo(), 2)
test_case = MyTestCase()
test_case.test_case_1()
这失败了;
AssertionError: <MagicMock name='B().bar()' id='140542513129176'> != 2
显然该行MockB.bar.return_value = 2
没有修改该方法的返回值。
解决方案
我认为您没有启动 MockB。您可以直接模拟“ main .B.bar”:
@unittest.mock.patch("__main__.B.bar")
class MyTestCase(unittest.TestCase):
def test_case_1(self, MockB):
MockB.return_value = 2
a = A()
self.assertEqual(a.foo(), 2)
推荐阅读
- html - HTML/CSS 报告 - RTL 语言
- javascript - 错误:[$injector:unpr] 未知提供者:dataProvider <- data
- c++ - 初始化程序无法确定 C++ 中字符串的大小
- python - Python 和 Pexpect -- Pxssh 已安装但不可用
- libjpeg - 'jpeg_mem_src':找不到标识符
- python - Python 'For' 循环迭代数组
- php - Codeigniter 和数据表搜索过滤列问题
- android - React Native App - 开发服务器返回响应错误代码:500
- javascript - jQuery 可滑动底页
- android - 如何将图像保持在透明背景上?