[英]How can I autospec mock attributes that are None by default in python 3?
[英]How can I mock object with nested attributes in Python?
考虑以下代码:
class Foo:
@staticmethod
def is_room_member(invitee, msg):
return invitee in msg.frm.room.occupants
我想测试is_room_member
方法,其中invitee
是一个字符串, occupants
是一个字符串列表。
如果invitee = 'batman'
且occupants = ['batman', 'superman']
方法is_room_member
返回True
。
msg
是需要msg
的对象,以便我可以测试此方法。
我如何测试这个方法,因为它需要这个具有嵌套属性的msg
对象?
我希望测试是这样的:
class Testing(unittest.TestCase):
def test_is_room_member(self):
occupants = ['batman', 'superman']
# mocking
# msg = MagicMock()
# msg.frm.room.occupants = occupants
self.assertTrue(Foo.is_room_member('batman', msg))
您的问题已有答案: 使用模拟模拟嵌套属性
import unittest
import mock
class Foo:
@staticmethod
def is_room_member(invitee, msg):
return invitee in msg.frm.room.occupants
class Testing(unittest.TestCase):
def test_is_room_member(self):
occupants = ['batman', 'superman']
# mocking
mocked_msg = mock.MagicMock()
mocked_msg.frm.room.occupants = occupants
self.assertTrue(Foo.is_room_member('batman', mocked_msg))
if __name__ == '__main__':
unittest.main()
既然 MagicMock 太神奇了……这正是你写的。
class Testing(unittest.TestCase):
def test_is_room_member(self):
occupants = ['batman', 'superman']
msg = MagicMock()
msg.frm.room.occupants = occupants
print(msg.frm.room.occupants) # >>> ['batman', 'superman']
self.assertTrue(Foo.is_room_member('batman', msg))
从单元测试文档:
Mock 和 MagicMock 对象在您访问它们时创建所有属性和方法,并存储它们如何使用的详细信息。
除非你另有说明,否则一切都会返回一个 MagicMock!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.