101 votes

ImportError : Aucun module nommé mock

J'essaie donc d'utiliser unittest.mock pour simuler certaines de mes méthodes dans mes tests unitaires. Je le fais :

from unittest.mock import MagicMock
f = open("data/static/mock_ffprobe_response")
subprocess.check_output = MagicMock(return_value=f.read())
f.close()

Mais j'y arrive :

ImportError: No module named mock

J'ai essayé :

pip install mock

Ça ne marche toujours pas.

127voto

DSM Points 71975

unittest est un module intégré ; mock est une bibliothèque externe (du moins dans les versions bêta antérieures à 3.3). Après avoir installé mock via pip install vous l'importez non pas en utilisant

from unittest.mock import MagicMock

mais

from mock import MagicMock

Edita: mock a été inclus dans le unittest (depuis Python3.3), et peut être importé par le module import unittest.mock .

23voto

Drew Points 993

Pour Python 2.7 :

Installez la moquette :

pip install mock

Ensuite, dans le code de test, utilisez cet import :

from mock import patch, MagicMock

16voto

MosteM Points 818

Si vous voulez supporter à la fois Python 2 et Python 3, vous pouvez également utiliser ce qui suit :

import sys
if sys.version_info >= (3, 3):
    from unittest.mock import MagicMock
else:
    from mock import MagicMock

ou, si vous ne voulez pas importer sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock

14voto

Boris Points 1440

Si vous utilisez Python 3.3 et plus le changement

import mock

à

from unittest import mock

Sur les anciennes versions de Python, ne modifiez rien dans le code et exécutez cette commande shell à la place :

pip install mock

Cette erreur d'importation se produit parce que unittest.mock a été ajouté dans Python 3.3, et il y a un module un backport sur PyPI pour les anciennes versions de Python. Donc, si votre code était sous Python 2, il essaie probablement d'importer le backport.


pyupgrade est un outil que vous pouvez exécuter sur votre code pour réécrire ces importations et supprimer d'autres restes inutiles de Python 2.

8voto

friederbluemle Points 796

Pour une raison quelconque, import unittest.mock n'a pas fonctionné pour moi, j'ai dû faire

from unittest import mock

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X