【发布时间】:2016-11-07 00:42:29
【问题描述】:
我有一个 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'>
我哪里做错了?
【问题讨论】:
-
测试时,
A()从mock_A返回return_value(一个普通的MagicMock,因为您没有指定其他任何内容),它不是@987654336 类的实例@。您需要将return_value设置为具有已定义method_a的内容。 -
mock_a.method_a.return_value = 'Mocked A' => mock_a().method_a.return_value = 'Mocked A' 应该更好:)
-
@AliSAIDOMAR 是完全正确的,应该是调用
mock_a的返回值,而不是mock_a本身。 -
@jonrsharpe 。谢谢你的解释。我刚试过。
mock_a().method_a.return_value = 'Mocked A'和mock_a.return_value.method_a.return_value = 'Mocked A'都有效。非常感谢您的 cmets。请你继续把它作为答案吗? -
@MehdiJafarniaJahromi 非常感谢!
标签: python python-unittest magicmock