python - 已模拟的类中的模拟方法
问题描述
我正在尝试为我正在模拟的类设置方法的返回值:
foo.py
class Foo:
def bar(self):
return {'a': 'b', 'c': 'd'}
class Beef:
def __init__(self):
self.foo = Foo()
def run(self):
val = self.foo.bar()
return val['a']
test_foo.py
import unittest
from unittest.mock import patch
from foo import Beef
class TestBeef(unittest.TestCase):
@patch('foo.Foo')
def test_run(self, mock_foo):
mock_foo.bar.return_value = {'a': 'x'} # how to do this?
beef = Beef()
assert result == {'a': 'x'}
这无法模拟该方法。由于这是一个简化的示例,因此我需要模拟整个 Foo 类是有原因的。在我的实际场景中,有很多初始化代码。
如何模拟已模拟的类的方法?
解决方案
在你的test_foo.py
:
import unittest
from unittest import mock
from foo import Beef, Foo
class TestBeef(unittest.TestCase):
def test_run(self):
mock.object.patch(Foo, 'bar', return_value={'a': 'x'})
beef = Beef()
assert result == {'a': 'x'}
推荐阅读
- flutter - 如何在 BLoC 模式上更改 Widget 时添加动画过渡?
- hash - 生成假公钥指纹
- php - COUNT(id) 或 MAX(id) - 哪个更快?
- ios - Appium - iOS - 应用路径必须是绝对路径或压缩文件的 URL
- javascript - JS - 查询 MySQL WHERE col IN 数组
- spring - 有没有一种服务发现方法可以在 localhost 和 Kubernetes 上运行而无需更改一行代码?
- swift - 如何在 swift xcode 中小于 1.00 的答案的开头添加一个零?
- python - 写入我的代码时写入命令不起作用
- android - 让定时器使用 Kotlin 中的主线程
- java - 在tomcat服务器启动后自动从war应用程序运行方法