Obtenir une valeur de retour pour une moqué de fichier.lire()

Je suis en utilisant python-maquette de se moquer d'un appel d'ouverture de fichier. Je voudrais être en mesure de passer à de fausses données de cette manière, afin que je puisse vérifier que read() est appelé ainsi que l'utilisation des données de test sans toucher le système de fichiers sur des tests.

Voici ce que j'ai obtenu jusqu'à présent:

file_mock = MagicMock(spec=file)
file_mock.read.return_value = 'test'

with patch('__builtin__.open', create=True) as mock_open:
    mock_open.return_value = file_mock

    with open('x') as f:
        print f.read()

La sortie de ce est <mock.Mock object at 0x8f4aaec> intead de 'test' comme je l'assume. Ce que je fais de mal dans la construction de cette maquette?

Edit:

Ressemble à ceci:

with open('x') as f:
     f.read()

et ce:

f = open('x')
f.read()

sont des objets différents. À l'aide de la simulation en tant que gestionnaire de contexte rend le retour d'une nouvelle Mock, alors que l'appelant directement renvoie ce que j'ai défini dans mock_open.return_value. Des idées?

OriginalL'auteur Brian Hicks | 2012-01-05