1

Ubuntu 13.04でPython 2.7でDjango 1.4を使用しています。私が取り組んでいる Django プロジェクトには、Nose と Coverage を使用したテスト スイート全体があります。テストを実行する前に、データベースにユーザーを作成する必要があります。どこでこれをしますか?

system_user = User(username=accounts_constants.SYSTEM_USER)
system_user.save()

この動機は、多くのデータベース トランザクションを処理する「システム ロボット」の存在に由来します。プロジェクト内に完全な追跡スイートを作成しました。ユーザーが機密情報を変更した場合、それを追跡します。システムがこれらの変更を行った場合、システム ユーザーを追跡情報にリストする必要があります。

この変更をサポートするために変更が必要なコードの場所がいくつかあります。明らかに、テスト データベースにはこのユーザーがありません。テストを実行する前に追加したいと思います(ただし、データベースが作成された後)。

私は掘り下げてきましたが、テスト目的でデータベースが作成された場所を正確に確認できません。私の最初の試みは、テスト スイート ランナーのinitでした。

class CustomTestSuiteRunner(NoseTestSuiteRunner):
    """
    Runs testing suite and adds code coverage report.
    """
    def __init__(self, *args, **kwargs):
        super(CustomTestSuiteRunner, self).__init__(*args, **kwargs)
        self.coverage = coverage.coverage()
        self.coverage.use_cache(0) # don't use caching with coverage.py
        system_user = User(username=accounts_constants.SYSTEM_USER)
        system_user.save()

まだ開発データベースを使用していたため、これは失敗しました (システム ユーザーはこのデータベースに既に存在します)。

テスト シーケンスでさらにユーザーを追加しようとしましたが、適切な場所がどこにあるのかわかりません。

どんな方向性でも大歓迎です。

EDIT1:

girasquid の提案されたソリューションから:

setUpそれぞれをスーパーに変更したくありませんCustomTestCase。代わりに、私はそれをやろうとしてい__init__ます。

class CustomTestCase(TestCase):
    def __init__(self, *args, **kwargs):
        super(CustomTestCase, self).__init__(*args, **kwargs)
        try:
            system_user = User.objects.create(
                username=accounts_constants.SYSTEM_USER)
            system_user.save()
        except psycopg2.IntegrityError:
            pass

しかし、私はから取得しIntegrityErrorていnoseます。なぜこれが考えられるのでしょうか?

lib/python2.7/site-packages/nose/loader.py", line 518, in makeTest
    return self._makeTest(obj, parent)
IntegrityError: duplicate key value violates unique constraint "auth_user_username_key"

EDIT2:

私たちのチームは、システム全体の変更ではなく、ユーザーを含めるようにケースバイケースの設定変更を実装することを確信していました.

4

1 に答える 1