A类具有另一个B类的属性。
Class A():
def __init__(self, b):
self.b = b
def get_b_secret(self, job_id):
x, y = self.b.get_secret(job_id)
return x, y
Class B():
def __init__(self, key, url):
self.key = key
self.url = url
def get_secret(job_id):
# logic to get secret
# return a tuple
return x, y
我想get_b_secret
通过整体模拟B类来为A类的方法编写单元测试。
@patch('b.B')
def test_get_b_secret(self, mock_b):
mock_b.b.get_secret.return_value = ('x', 'y')
obj = A(mock_b)
expected = ('x','y')
self.assertEqual(obj.get_b_secret('001'), expected)
我意识到通过模拟类B,我实际上并没有将B实例化为A实例内部的实例。这就是为什么当我调试测试,A
的get_b_secret
返回一个MagicMock
对象来代替。
我发现这篇关于嘲笑对象的文章。但是在该示例中,外部类的init没有内部Class对象作为参数。所以有点不同。最好的方法是什么?
如果您的示例代码是正确的,则不需要模拟B类。您只需在初始化它时将带有get_secret函数的模拟传递给A类。
mock = MagicMock()
mock.return_value.get_secret.return_value = ('x', 'y')
obj = A(mock)
....
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句