Возможно, хорошее возможное решение - это просто написать код так, чтобы его можно было легко протестировать.В случае 'diff' кажется достаточно легким (по общему признанию, не имеющим много другого контекста) иметь diff в качестве аргументов уже открытые файловые объекты.Это, вероятно, довольно небольшое изменение, вносимое в код, и делает тестирование очень простым, так как вы можете легко предоставить фиктивные файловые объекты для diff () при тестировании, вместо того, чтобы пытаться перепрыгивать через обручи, высмеивающие два экземпляра одного и того жевстроенная функция в качестве менеджера контекста, вызываемая внутри ... самого себя ... или что-то еще; -)
import StringIO
diff(a, b):
oldtext = a.read()
newtext = b.read()
def test_diff():
a = StringIO.StringIO('text1')
b = StringIO.StringIO('text2')
res = diff(a, b)
<some assertion here>
Будет ли это работать в вашем случае?