mercredi 6 novembre 2019

Asserting on the return value of a MagicMock side effect

I'm trying to run asserts on the return value of a side effect. How can I declare the return value so that it won't generate a NEW MagicMock every time? (I'd like a reference to the return value so I can assert on it)

I've tried declaring this in a separate statement, which works:

return_value = mock.MagicMock()
side_effect = mock.MagicMock(side_effect = lambda *arguments: return_value)
side_effect()()
<MagicMock name='mock()' id='140388466683016'>
side_effect().assert_called_once()

However, I'd like to know if there's a way to declare everything inline so I don't have to create separate mocks for each side effect.

It would be nice to do something like this:

side_effect = mock.MagicMock(side_effect = lambda *arguments: mock.MagicMock(id=123))
side_effect()
<MagicMock id='123'> #Doesn't actually give id '123'
side_effect().assert_called_once()
#Throws an error

However, it looks like the above example creates a new MagicMock every time, meaning the assert will fail.

Am I doomed to create separate objects for every return value to keep them static?

Aucun commentaire:

Enregistrer un commentaire