Hil*_*gar 6 python unit-testing mocking python-3.x
考虑以下代码:
class Foo:
@staticmethod
def is_room_member(invitee, msg):
return invitee in msg.frm.room.occupants
Run Code Online (Sandbox Code Playgroud)
我想测试该方法is_room_member,其中invitee是一个字符串,并且
occupants是一个字符串列表。
如果invitee = 'batman'且occupants = ['batman', 'superman']该方法is_room_member返回True。
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))
Run Code Online (Sandbox Code Playgroud)
小智 9
您的问题已有答案: Mockingnestedpropertieswithmock
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()
Run Code Online (Sandbox Code Playgroud)