我试图在我正在测试的类中模拟辅助方法,但我无法设置返回值。相反,它是 None
,这会导致调用方法出错。
import unittest
import asyncio
import unittest.mock
class MyClass:
@asyncio.coroutine
def return_number(self):
return 5
@asyncio.coroutine
def add_two(self):
val = yield from self.return_number()
return val + 2
class TestMyClass(unittest.TestCase):
def setUp(self):
self.mc = MyClass()
def test_add(self):
val = asyncio.get_event_loop().run_until_complete(self.mc.add_two())
self.assertEqual(val, 7)
def test_with_mock(self):
""" Replace return_number with mocked method """
mm = unittest.mock.MagicMock()
mm.iter.return_value = 2
self.mc.return_number = unittest.mock.Mock(return_value=mm)
val = asyncio.get_event_loop().run_until_complete(self.mc.add_two())
self.assertEqual(val, 4)
if __name__ == '__main__':
unittest.main()
在此示例中是否有某种方法可以模拟 return_number
以便返回特定值?
最佳答案
你也可以做类似的事情:
def test_with_mock(self):
""" Replace return_number with mocked method """
with mock.patch.object(self.mc, "return_number", return_value=2):
self.mc.return_number = asyncio.coroutine(self.mc.return_number)
val = asyncio.get_event_loop().run_until_complete(self.mc.add_two())
self.assertEqual(val, 4)
关于python - 设置模拟 asyncio.coroutine 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682765/