How do I mock an open(...).write() without getting a 'No such file or directory' error?

Mock builtins.open (or module.open, module = the module name that contains WriteData) with the mock_open:

import builtins

class TestListWindowsPasswords(unittest.TestCase):
    def setUp(self):
        self._orig_pathexists = os.path.exists
        os.path.exists = MockPathExists(True)

    def test_dump(self):
        with patch('builtins.open', unittest.mock.mock_open()) as m:
            data_writer = WriteData(
                dir='/my/path/not/exists',
                name='Foo'
            )
            data_writer.dump()

        self.assertEqual(os.path.exists.received_args[0], '/my/path/not/exists')  # fixed
        m.assert_called_once_with('/my/path/not/exists/output.text', 'w+')
        handle = m()
        handle.write.assert_called_once_with('Hello, Foo!')

You can use the __enter__ magic method to simulate which:

from unittest.mock import patch, MagicMock, call, mock_open

@patch('os')
@patch('builtins.open', new_callable=mock_open())
def test_dump(self, mock_open_file, mock_os):
    data_writer = WriteData(dir='/my/path/not/exists', name='Foo')

    mock_os.path.exists.assert_called_once_with('/my/path/not/exists')
    mock_open_file.assert_called_once_with('/my/path/not/exists/output.text', 'w+')
    mock_open_file.return_value.__enter__().write.assert_called_once_with('Hello, Foo!')

Hope this helps!