@@ -60,6 +60,15 @@ def ls(cls, path):
6060 return os .listdir (path )
6161
6262
63+ class TestObject :
64+ """
65+ Class that is used for testing create_autospec with child mocks
66+ """
67+
68+ def run (self ) -> str :
69+ return "not mocked"
70+
71+
6372@pytest .fixture
6473def check_unix_fs_mocked (
6574 tmpdir : Any , mocker : MockerFixture
@@ -156,7 +165,6 @@ def test_mock_patch_dict_resetall(mocker: MockerFixture) -> None:
156165 [
157166 "ANY" ,
158167 "call" ,
159- "create_autospec" ,
160168 "MagicMock" ,
161169 "Mock" ,
162170 "mock_open" ,
@@ -185,23 +193,35 @@ def test_mocker_resetall(mocker: MockerFixture) -> None:
185193 listdir = mocker .patch ("os.listdir" , return_value = "foo" )
186194 open = mocker .patch ("os.open" , side_effect = ["bar" , "baz" ])
187195
196+ mocked_object = mocker .create_autospec (TestObject )
197+ mocked_object .run .return_value = "mocked"
198+
188199 assert listdir ("/tmp" ) == "foo"
189200 assert open ("/tmp/foo.txt" ) == "bar"
201+ assert mocked_object .run () == "mocked"
190202 listdir .assert_called_once_with ("/tmp" )
191203 open .assert_called_once_with ("/tmp/foo.txt" )
204+ mocked_object .run .assert_called_once ()
192205
193206 mocker .resetall ()
194207
195208 assert not listdir .called
196209 assert not open .called
210+ assert not mocked_object .called
197211 assert listdir .return_value == "foo"
198212 assert list (open .side_effect ) == ["baz" ]
213+ assert mocked_object .run .return_value == "mocked"
199214
200215 mocker .resetall (return_value = True , side_effect = True )
201216
202217 assert isinstance (listdir .return_value , mocker .Mock )
203218 assert open .side_effect is None
204219
220+ if sys .version_info >= (3 , 9 ):
221+ # The reset on child mocks have been implemented in 3.9
222+ # https://bugs.python.org/issue38932
223+ assert mocked_object .run .return_value != "mocked"
224+
205225
206226class TestMockerStub :
207227 def test_call (self , mocker : MockerFixture ) -> None :
0 commit comments