模拟一个 return 值,它是一个对象
Mocking a return value which is an object
我想为以下代码编写一些测试:
def person_name_length(id):
person = get_person(id)
return len(person.first_name)
如何模拟 get_person(id)
方法,使其 returns 一个具有 first_name
属性 值的对象?
在代码中:
@patch('get_person')
def test_person_name_length(self, get_person_mock):
get_person_mock.return_value = # what goes here??? calling .first_name on it should return 'Bob'
self.assertEqual(person_name_length(1), 3)
我认为你应该需要做这样的事情
class MockPerson(object):
first_name = 'Bob'
@patch('get_person')
def test_person_name_length(self, get_person_mock):
get_person_mock.return_value = MockPerson()
self.assertEqual(person_name_length(1), 3)
您不需要为此创建 one-off 对象。这更容易:
@patch('get_person')
def test_person_name_length(self, get_person_mock):
get_person_mock.return_value = mock.Mock(first_name='Bob')
self.assertEqual(person_name_length(1), 3)
我想为以下代码编写一些测试:
def person_name_length(id):
person = get_person(id)
return len(person.first_name)
如何模拟 get_person(id)
方法,使其 returns 一个具有 first_name
属性 值的对象?
在代码中:
@patch('get_person')
def test_person_name_length(self, get_person_mock):
get_person_mock.return_value = # what goes here??? calling .first_name on it should return 'Bob'
self.assertEqual(person_name_length(1), 3)
我认为你应该需要做这样的事情
class MockPerson(object):
first_name = 'Bob'
@patch('get_person')
def test_person_name_length(self, get_person_mock):
get_person_mock.return_value = MockPerson()
self.assertEqual(person_name_length(1), 3)
您不需要为此创建 one-off 对象。这更容易:
@patch('get_person')
def test_person_name_length(self, get_person_mock):
get_person_mock.return_value = mock.Mock(first_name='Bob')
self.assertEqual(person_name_length(1), 3)