Django setUpTestData() と setUp() の比較 質問する

Django setUpTestData() と setUp() の比較 質問する

Django 1.8には以下が同梱されていますリファクタリングされたテストケーストランザクションとセーブポイントを使用してクラスレベルでデータを初期化することができます。テストデータを設定する()これはunittestの設定()すべてのテスト メソッドの前に実行されます。

質問:setUp()現在存在する Djangoの使用例は何ですかsetUpTestData()?

私は客観的で高レベルの回答のみを探しています。そうでなければ、この質問は Stack Overflow にとって範囲が広すぎることになります。

ベストアンサー1

クラスメソッドとして実行できないセットアップコードが存在することは珍しくありません。注目すべき例としては、Djangoテストクライアント: 同じクライアントインスタンスを、同じデータを多く共有するテスト間で再利用したくないかもしれません。実際、Djangoのサブクラスに自動的に含まれるクライアントインスタンスはSimpleTestCaseテスト方法ごとに作成クラス全体ではなく、Django 1.8 以前のバージョンのテストでsetUp次のようなメソッドがあったとします。

    def setUp(self):
        自己.the_user = f.UserFactory.create()
        self.the_post = f.PostFactory.create(author=self.the_user)
        自己.クライアント.ログイン(
            ユーザー名=self.the_user.username、パスワード=TEST_PASSWORD
        # ...など

setUpを に変更しsetUpTestData、その上にデコレータを追加し@classmethod、すべてのselfを に変更することで、テスト ケースを最新化したいと思うかもしれませんcls。しかし、それは で失敗します。代わりに、共有データには を使用し、テスト メソッドごとのクライアントには をAttributeError: type object 'MyTestCase' has no attribute 'client'使用する必要があります。setUpTestDatasetUp

    @クラスメソッド
    def setUpTestData(cls):
        cls.the_user = f.UserFactory.create()
        cls.the_post = f.PostFactory.create(author=cls.the_user)
        # ...など

    def setUp(self):
        自己.クライアント.ログイン(
            ユーザー名=self.the_user.username、パスワード=TEST_PASSWORD

注: その変数が何なのか知りたい場合はサンプルコードで行っていることは、ファクトリーボーイ- テスト用のオブジェクトを作成するための便利なフィクスチャ ライブラリ。

おすすめ記事