Python Mocking with unitest.mock: Difference between revisions
Jump to navigation
Jump to search
(→Mock) |
|||
Line 10: | Line 10: | ||
=<tt>MagicMock</tt>= | =<tt>MagicMock</tt>= | ||
Difference between <code>[[#Mock|Mock]]</code> and <code>[[#MagicMock|MagicMock]]</code>. | |||
=<tt>patch() and @patch</tt>= | =<tt>patch() and @patch</tt>= | ||
=Sentinel= | =Sentinel= |
Revision as of 00:17, 28 August 2022
External
Internal
Overview
The unittest.mock
library allows replacing parts of the system under test with mock objects and make assertion about how they are accessed and used.
Mock
MagicMock
Difference between Mock
and MagicMock
.
patch() and @patch
Sentinel
TODEPLETE
Mocking
To mock a class and a method of that class:
from unittest.mock import Mock
class SomeClass:
def __init__(self, state):
self.state = state
def some_method(self):
return self.state
sc = SomeClass('A')
assert 'A' == sc.some_method()
sc_mock = Mock(SomeClass)
sc_mock.some_method = Mock(return_value='blah')
assert 'blah' == sc_mock.some_method()
How to simulate different return values for a mocked function depending on an argument value?
Mocking a Property
from unittest.mock import patch, PropertyMock
class A:
@property
def property_a(self):
return "pa"
with patch('__main__.A.property_a', new_callable=PropertyMock) as mock_property:
mock_property.return_value = 'mocked pa'
a = A()
assert a.property_a == 'mocked pa'
Mocking a Method
from unittest.mock import patch
class A:
def method_a(self):
return "ma"
with patch.object(A, 'method_a', return_value='mocked ma') as mock_method:
a = A()
assert a.method_a() == 'mocked ma'