テスト用モジュールを分割する方法

※ django-noseを使った方がよさそうです。django-noseを使ったユニットテスト

Djangoでstartappコマンドでアプリを作成したときに、アプリディレクトリの直下にtests.pyがというモジュールが自動的に作られます。ここにテストケースを書き、「python manage.py test アプリ名」コマンドを打つとテストを実施できます。しかし、アプリが大きいのに一つのモジュールに全テストケースをまとめると、ファイルサイズが大きくなりすぎてしまいます。なので、テストモジュールを分割する方法を調べました。

テスト用のモジュールを分割する方法

  1. tests.pyを削除して、testsディレクトリを作成する。
  2. testsディレクトリにテストモジュールを作成する。
  3. testsディレクトリに__init__.pyファイルを作成する。
  4. __init__.pyで、テストモジュールをimportするようにする。

以上です。tests下にディレクトリを作成しても、同じようにinit.pyを作成すればテストできました。

--- ファイルの階層構造 ---

tests/
  - __init__.py
  - test1.py
  - test2.py
  - test3/
    - __init__.py
    - test3.py
--- ファイル: __init__.py ---

from test1 import *
from test2 import *
from test3 import *
[/python]
[python title="test1.py"]
from django.test import TestCase


class Test1(TestCase):
    def test_basic_addition(self):
        self.assertEqual('test%d' % 1, 'test1')
--- ファイル: test2.py ---

from django.test import TestCase

class Test2(TestCase):
    def test_basic_addition(self):
        self.assertEqual('test%d' % 2, 'test2')
--- ファイル: test3/__init__.py ---

from test3 import *
[/python]
[python title="test3/test3.py"]
from django.test import TestCase

class Test3(TestCase):
    def test_basic_addition(self):
        self.assertEqual('test%d' % 3, 'test3')

上記例の注意点としましては、クラス名でimortしているため、クラス名がバッティングしているとテストされないクラスが出てくる点です。クラス名はモジュール名のキャメルケースにするなど、バッティングしない仕組みが必要だと思います。

この記事が役に立った場合、シェアしていただけると励みになります!!