Reputation: 11327
I'd like to write some tests for the following code:
def person_name_length(id):
person = get_person(id)
return len(person.first_name)
How can I mock out get_person(id)
method so that it returns an object which has a value for first_name
property?
In code:
@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)
Upvotes: 11
Views: 11244
Reputation: 16563
You don't need to create a one-off object for this. This is easier:
@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)
Upvotes: 6
Reputation: 849
I think you should need to do something like this
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)
Upvotes: 12