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!!

7
fogx 15 nov. 2017 à 18:58

4 réponses

Meilleure réponse

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.

6
John Mee 23 avril 2019 à 01:57

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 ?

6
ptr 16 nov. 2017 à 12:34

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

1
Michal Holub 2 mars 2018 à 09:00

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 !

3
Mr Jmad 8 déc. 2017 à 23:27
47311942