Во-первых, вам на самом деле не нужно юнит-тестирование open()
, поскольку вполне разумно предположить, что стандартная библиотека верна.
Далее, вы не хотите манипулировать файловой системой, чтобы получить open()
, чтобы сгенерировать нужную ошибку, потому что тогда вы не юнит-тестирование, вы проводите функциональный / интеграционный тест, включая файловую систему. .
Таким образом, вы можете заменить open()
в глобальном пространстве имен на суррогат, который просто вызывает IOError
. Хотя, возможно, нужно убедиться, что вы положили вещи обратно, если выполнение продолжается.
Но, в конце концов, какое значение имеет тест? В этом фрагменте кода так мало вашей собственной системы. Даже замена open()
на самом деле просто оказывается тестом, который говорит «работает ли оператор try
и finally
в Python?»
Мое предложение? Просто добавьте заявление в строку документации, которая записывает ваши ожидания. «Вызывает IOError, если файл не может быть записан». Тогда двигайся дальше. Вы можете добавить модульный тест позже, если этот метод приобретает некоторую сложность (и достоинства для тестирования).