Je travaille sur le didacticiel django et j'essaie de faire fonctionner les cas de test avec pycharm. J'ai cependant rencontré un problème. Quand j'exécute la commande: test d'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éparer cela? cela se produit même lorsque la classe test.py est vide. Donc, cela doit être un problème avec pycharm alors (?) J'utilise Pycharm Pro 2017.2.4, Django 2.0 et Python 3.6 Mes configurations d'exécution / débogage ne sont que les paramètres Django de base prédéfinis que pycharm fait
Merci!!
4 réponses
Le nouveau PyCharm a ce bug corrigé.
Si la mise à jour 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
Encore une fois à la ligne 56, passez à:
if VERSION >= (1, 6):
Et enfin, à la ligne 256, passez à:
if VERSION >= (1, 1):
Pourquoi? Parce que le VERSION
fait référence à la version de django, qui a coché pour 2
pointer quelque chose.
django.utils.unittest
a été supprimé dans Django 1.9 Je suppose que vous utilisez peut-être une ancienne version du didacticiel.
Dans pycharm, utilisez-vous la configuration d'exécution django.tests.testcases
? Mieux vaut utiliser Python unittest.TestCase
comme détaillé ici
Edit: Donc dans django_test_runner.py vous disposez des é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 runconfig est <1.7 (lorsque django.utils.unittest
était obsolète.) Qu'est-ce qui est retourné si vous faites from django import VERSION
et l'imprimez dans votre interpréteur ?
Il y a en fait plus de problèmes avec django_test_runner.py
. Ce qui a aidé a été de le remplacer par cette version: https://gist.github.com/IlianIliev/6f8853a237abe52 / a>
Il peut être trouvé dans <pycharm_root>/helpers/pycharm
Je pense que c'est un bug dans django_test_runner.py de Pycharm.
Dans mon pycharm, le code est:
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 à d'autres endroits avec les mêmes astuces.
C'est du travail !
Questions connexes
De nouvelles questions
django
Django est un framework d'application Web open-source côté serveur écrit en Python. Il est conçu pour réduire l'effort requis pour créer des sites Web et des applications Web complexes axés sur les données, avec un accent particulier sur moins de code, pas de redondance et être plus explicite qu'implicite.