2017-11-15 14 views
4

私はdjangoチュートリアルで作業していますが、pycharmで実行するテストケースを取得しようとしています。しかし、私は問題に遭遇しました。私はコマンドを実行すると:アプリのテストdjangoでPycharmをスローImportError: 'unittest'という名前をインポートできません

を、私はこの例外に直面しています:テストフレームワークが予期せず終了:

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 

どうやら、django_test_manage.pyファイルは動作しません。どうすればこの問題を解決できますか? これは、test.pyクラスが空の場合でも発生します。だから、その後、pycharmに問題がなければなりません(?) 私は2017年2月4日プロPycharmを使用しています、ジャンゴ2.0とPython 3.6 マイ実行/デバッグ構成はpycharmが

はあなたに感謝していることだけで、基本的な、プリセットジャンゴ設定されています!!

+0

で見つけることができますか?これはdjango 2.0のバージョンです。https://docs.djangoproject.com/en/2.0/intro/tutorial05/ – ptr

+0

いいえ、それは正しいものです。しかし、私のテストケースに関係なく、私は全くテストを実行できません(tests.pyクラスが空であっても同じエラーが発生します) – fogx

答えて

2

新しいPyCharmがこのバグを修正しました。

更新PyCharmができない場合は、あなたが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 
+1

また、このファイルに 'if VERSION [1]> = 6:'があれば '' VERSION> =(1,6): '、' 'VERSION [1]> = 1:' 'VERSION> =(1,1):'に置き換えられ、すべてが魅力のように機能します。 –

6

django.utils.unittestがDjango 1.9で削除されました。あなたは古いバージョンのチュートリアルを使用している可能性があります。

pycharmではdjango.tests.testcases実行設定を使用していますか?より良いPythonのを使用するようにunittest.TestCaseなど詳細なhere

編集:だからdjango_test_runner.pyに次き:

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 

をだから、あなたのテストのrunConfigためintepreterで使用しているジャンゴのバージョンであることが表示されます< 1.7(django.utils.unittestが推奨されていなかった場合)from django import VERSIONを実行してインタプリタで印刷すると返されるのは何ですか?

+0

unittestを呼び出していない、pycharmは、そのdjango_test_runner.pyクラスで – fogx

+0

でもできますunittestsが削除されたことを私に指摘してください。 ここには、それらが好ましい方法であると記載されています。 https://docs.djangoproject.com/en/2.0/topics/testing/ – fogx

+0

https://code.djangoproject.com/ticket/20680推奨するunittestライブラリはPYTHON標準ライブラリunittest(あなたが投稿したページのリンクを参照してください)コピーであって削除された組み込みdjango.utils.unittestライブラリではありません。 – ptr

2

Pycharmのdjango_test_runner.pyのバグだと思います。私pycharmで

、コードは次のとおりです。

if VERSION[1] >= 7: 
    import unittest 
    else: 
    from django.utils import unittest 

しかし、あなた(と私)はDjango 2.0、そうpycharm輸入使う 'django.utilsからのunittestのインポート' ...

私が変更されていますそのような私のTEST_RUNNER:

if VERSION[0] > 1 or VERSION[1] >= 7: 
    import unittest 
    else: 
    from django.utils import unittest 

あなたが同じトリックを持つ他の場所で同じファイルを変更する必要があります。

それは仕事です!

+0

より良いアプローチは 'もしバージョン> =(1、7)'でしょう。 1.7より下のdjangoでは、コードが正しくインポートされないためです。 –

0

django_test_runner.pyでより多くの問題に実際にあります。このバージョンでそれを置き換えることでした助けた何:https://gist.github.com/IlianIliev/6f884f237ab52d10aa0e22d53df97141

あなたがチュートリアルの間違ったバージョンを見ている場合、私は思ったんだけど<pycharm_root>/helpers/pycharm

関連する問題