Je travaille sur le didacticiel Django et j'essaie de faire en sorte que les scénarios de test fonctionnent avec pycharm. J'ai rencontré un problème cependant. Quand j'exécute la commande: test de l'application
je suis confronté à cette exception: le cadre de test s'est arrêté de manière inattendue
F:\programming\Python\python.exe "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\Django_test_manage.py" test a F:\programming\Projects\pycharm\untitled
Testing started at 4:54 PM ...
Traceback (most recent call last):
File "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\Django_test_manage.py", line 157, in <module>
utility.execute()
File "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\Django_test_manage.py", line 110, in execute
from Django_test_runner import is_nosetest
File "F:\programming\JetBrains\PyCharm 2017.2.4\helpers\pycharm\Django_test_runner.py", line 42, in <module>
from Django.utils import unittest
ImportError: cannot import name 'unittest'
Process finished with exit code 1
Apparemment, le fichier Django_test_manage.py ne fonctionne pas. Comment puis-je résoudre ce problème? Cela se produit même lorsque la classe test.py est vide. Il faut donc que pycharm pose un problème (?) J'utilise Pycharm Pro 2017.2.4, Django 2.0 et Python 3.6 Mes configurations d'exécution/de débogage ne sont que les paramètres Django prédéfinis de base que pycharm fait
je vous remercie!!
Le nouveau PyCharm a ce bug corrigé.
Si la mise à jour de PyCharm n'est pas une option, vous pouvez modifier les lignes suivantes sur Django_test_runner.py
:
if VERSION[1] >= 7:
import unittest
else:
from Django.utils import unittest
à:
if VERSION >= (1, 7):
import unittest
else:
from Django.utils import unittest
Django.utils.unittest
a été supprimé dans Django 1.9. Je suppose donc que vous utilisez peut-être une ancienne version du didacticiel.
Dans pycharm, utilisez-vous le Django.tests.testcases
run config? Mieux vaut utiliser le unittest.TestCase
de Python comme détaillé ici
edit: Donc dans Django_test_runner.py vous avez les éléments suivants:
from Django.test.testcases import TestCase
from Django import VERSION
# See: https://docs.djangoproject.com/en/1.8/releases/1.7/#Django-utils-unittest
# Django.utils.unittest provided uniform access to the unittest2 library on all Python versions.
# Since unittest2 became the standard library's unittest module in Python 2.7,
# and Django 1.7 drops support for older Python versions, this module isn't useful anymore.
# It has been deprecated. Use unittest instead.
if VERSION >= (1,7):
import unittest
else:
from Django.utils import unittest
Il semble donc que la version de Django que vous utilisez dans l'interpréteur pour votre test de configuration est <1.7 (lorsque Django.utils.unittest
était obsolète.) Que renvoie-t-il si vous faites from Django import VERSION
et l'imprimez dans votre interpréteur?
Je pense que c'est un bug dans Django_test_runner.py de Pycharm.
Dans mon pycharm, le code est le suivant:
if VERSION[1] >= 7:
import unittest
else:
from Django.utils import unittest
Mais vous (et moi) utilisez Django 2.0, donc pycharm import "de Django.utils import unittest" ...
J'ai modifié mon test_runner comme ça:
if VERSION[0] > 1 or VERSION[1] >= 7:
import unittest
else:
from Django.utils import unittest
Vous devez modifier le même fichier ailleurs, avec les mêmes astuces.
C'est du travail !
Il y a en fait plus de problèmes avec Django_test_runner.py
. Ce qui a aidé a été de la remplacer par cette version: https://Gist.github.com/IlianIliev/6f884f237ab52d10aa0e22d53df97141
On peut le trouver dans <pycharm_root>/helpers/pycharm