PyDev で Django 1.9 のユニットテストが失敗する対策

1.PyDev + Django1.9 のユニットテストで、DjangoTestSuiteRunner がインポート出来ないエラー

お気に入りの、Eclipse + PyDev で、Django 1.9 の環境を構築。

ちょっと、ロジックを書き始めようと、テストケースの準備をしたららら、、、

DjangoTestSuiteRunner がインポート出来ない。むむ。

Finding files... done.
Importing test modules ... done.
Traceback (most recent call last):
  File "C:\Programs\eclipse_mars_pydev\plugins\org.python.pydev_4.5.4.201601292234\pysrc\runfiles.py", line 238, in 
    main()
  File "C:\Programs\eclipse_mars_pydev\plugins\org.python.pydev_4.5.4.201601292234\pysrc\runfiles.py", line 89, in main
    return pydev_runfiles.main(configuration)  # Note: still doesn't return a proper value.
  File "C:\Programs\eclipse_mars_pydev\plugins\org.python.pydev_4.5.4.201601292234\pysrc\_pydev_runfiles\pydev_runfiles.py", line 835, in main
    PydevTestRunner(configuration).run_tests()
  File "C:\Programs\eclipse_mars_pydev\plugins\org.python.pydev_4.5.4.201601292234\pysrc\_pydev_runfiles\pydev_runfiles.py", line 793, in run_tests
    MyDjangoTestSuiteRunner(run_tests).run_tests([])
  File "C:\Programs\eclipse_mars_pydev\plugins\org.python.pydev_4.5.4.201601292234\pysrc\_pydev_runfiles\pydev_runfiles.py", line 813, in run_tests
    raise AssertionError("Unable to run suite with DjangoTestSuiteRunner because it couldn't be imported.")
AssertionError: Unable to run suite with DjangoTestSuiteRunner because it couldn't be imported.

 

単純に発生箇所を見ると、原因は、PyDev のプラグインのようだ。

File "C:\Programs\eclipse_mars_pydev\plugins\org.python.pydev_4.5.4.201601292234\pysrc\_pydev_runfiles\pydev_runfiles.py", line 813, in run_tests

 

実行する内容はテストケースのひな形にしようと思っている単純なもの。

# -*- encoding:utf-8 -*-
from django.conf import settings
from django.test import TestCase
import django

# DJANGO SETTING UP!
django.setup()

class TemplateTest(TestCase):
    '''
    '''
    @staticmethod
    def setUpClass():
        pass
        
    def test_template(self):
        print 'template'

Django 1.7 の時は問題なく動いていた。

2.原因 Django 1.8 で、DjangoTestSuiteRunner は廃止された!

https://docs.djangoproject.com/en/1.9/internals/deprecation/

どうやら、django.test.simple.DjangoTestSuiteRunner は、Django 1.8 で廃止され、django.test.runner.DiscoverRunner に置き換わったのが原因、で、まだPyDevはおっついていないと。

大変困る!

ということで、上記スタックトレースの当該ファイルを直接編集し、クラスを django.test.runner.DiscoverRunner に置き換える。

djnago_pydev_unittest

具体的は、805 行目あたりから、以下の3カ所

  :
try:
    #from django.test.simple import DjangoTestSuiteRunner 次行に置き換え
    from django.test.runner import DiscoverRunner
except:
    class DjangoTestSuiteRunner:
        def __init__(self):
            pass

        def run_tests(self, *args, **kwargs):
            raise AssertionError("Unable to run suite with DjangoTestSuiteRunner because it couldn't be imported.")

#class MyDjangoTestSuiteRunner(DjangoTestSuiteRunner): 次行に置き換え
class MyDjangoTestSuiteRunner(DiscoverRunner):

    def __init__(self, on_run_suite):
        #DjangoTestSuiteRunner.__init__(self) 次行に置き換え
        DiscoverRunner.__init__(self)
        self.on_run_suite = on_run_suite
  :

3.成功

実行してみたら、テスト出来ました。

よかったよかった。

djnago_pydev_unittest_success

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です