So I am working with the below basic function:
def whatever(..):
for input_file in files:
compressed_file = Path(input_file)
if not compressed_file.name.replace('test_', '').startswith(COMPRESSED_FILE_PREFIX):
continue
So I mock the Path function like this:
@mock.patch('path_to_Path_function.Path')
def test_choose_MFII_files(mock_Path):
mock_Path.return_value = 'files/exchange'
mock_Path.name.return_value = 'whatever'
Now when I run this, I get an error saying
AttributeError: 'str' object has no attribute 'name'
I can see why I get this error, because mock_Path.return_value is set to a string!
But how can I set mockPath.name.return_value to whatever; I just want to mock it out.
I think using MagicMock() somehow would work but I'm not sure how. Any help would be great!
You want:
mock_Path's return value (which defaults to another mock object) corresponds tocompressed_filein the function under test, so the thing you want to set to a string is thenameattribute of that object.If you wanted to write it a little more verbosely to make the nesting more obvious it might look like: