2009-08-13 7 views
3

私はDjangoのWebプロジェクトで作業しています。私はpython unittestフレームワークを使用しています。すべてのアプリのために私はいくつかの備品を持っています。これは、すべてのアプリがフィクスチャ内にいくつかの同一のテーブルを持つことを意味します。そうでなければモデルを変更すると、この具体的なテーブルが参照されているすべてのjsonのフィクスチャを変更する必要があるため、アプリケーションとテストケースの間でフィクスチャを共有したいと思います。djangoユニットテストとグローバルフィクスチャ

グローバルフィクスチャを使用することは賢明ですか?

答えて

1

DjangoのTesting architectureを調べることを強くおすすめします。特にTestCase.fixturesをチェックしてください。 unittestよりははるかに高度でDjango固有です。

+0

ありがとうございました。私はDjango TestCaseを使用しています。私の質問はDjangoのテストケースを使用することではなく、フィクスチャを再利用することでした。誰かがそれに悪い経験をしている場合。 –

+0

fixturesプロパティは、loaddataと同じ読み込みルールに従います。http://docs.djangoproject.com/en/dev/ref/django-admin/#loaddata-fixture-fixtureこれにより、共通のフィクスチャファイルを1つのアプリケーションに配置することができます。すべてのテストケースからロードします。 – dar

1

tearDownメソッド(またはteardown_test_environmentメソッド - 以下を参照)で削除する限り、グローバルフィクスチャを使用すると何か問題はないと思います。

どうすればよいかわかりません。もしそうなら、私が考えることができる2つの方法があります。

  1. すべてのテストに共通の基本クラスを使用します。このようなもの:

    class TestBase(django.test.TestCase): 
        fixtures = ['common_fixtures.xml'] 
    
    class MyTestClass(TestBase): 
        fixtures = TestBase.fixtures + ['fixtures_for_this_test.xml'] 
    
        def test_foo(self): 
         # test stuff 
    
  2. カスタムテストランナーを使用します。テストランナーでは、テストを実行する前に必要なすべてのフィクスチャをロードし、テストを実行した後にそれらを取り除きます。好ましくは、独自のsetup_およびteardown_test_environmentメソッドを使用してこれを行う必要があります。

+0

このような外観のJSONフィクスチャは何ですか?ローカルのもの以外のアプリを見つけることができません –

+0

カスタムテストランナーを使用する場合は、setup_test_environmentではなく、setup_databasesでテストデータベースを作成した後でフィクスチャをロードする必要があります。 – Tony

+0

一般的なテスト基盤をサブクラス化することは、Django 1.8のフィクスチャで動作するようには見えません。選択肢はありますか? – Martin

2

静的フィクスチャを使用しないでください。自動テストパターンが正しくありません。ダイナミックなフィクスチャを使用します。

Django Dynamic Fixtureには、グローバルフィクスチャを作成するオプションがあります。 Nose pluginまたはShelve optionを確認してください。

関連する問題