13

SeleniumテストにDjango1.4のLiveServerTestCaseを使用していますが、setUpClassクラスメソッドに問題があります。私が理解している限り、MembershipTests.setUpClass単体テストが実行される前に1回実行されます。

データベースにユーザーを追加するコードを挿入しましたMembershipTests.setUpClassが、テストを実行しMembershipTests.test_signupても、テストデータベースにユーザーが追加されていません。私は間違って何をしていますか?私が作成したユーザーは、setUpClassすべての単体テストで利用できると思います。

ユーザー作成コードを挿入しMembershipTests.setUpて実行するMembershipTests.test_signupと、ユーザーを確認できますが、すべての単体テストの前にこの実行をそのまま実行する必要はありませんsetUp。ご覧のとおり、カスタムLiveServerTestCaseクラスを使用して、すべてのテストに基本的な機能を追加しています(test_utils.CustomLiveTestCase)。これは私の問題と関係があるのではないかと思います。

前もって感謝します。

test_utils.py

from selenium.webdriver.firefox.webdriver import WebDriver
from django.test import LiveServerTestCase

class CustomLiveTestCase(LiveServerTestCase):

    @classmethod
    def setUpClass(cls):
        cls.wd = WebDriver()
        super(CustomLiveTestCase, cls).setUpClass()

    @classmethod
    def tearDownClass(cls):
        cls.wd.quit()
        super(CustomLiveTestCase, cls).tearDownClass()

tests.py

from django.contrib.auth.models import User
from django.test.utils import override_settings
from test_utils import CustomLiveTestCase 
from test_constants import *

@override_settings(STRIPE_SECRET_KEY='xxx', STRIPE_PUBLISHABLE_KEY='xxx')
class MembershipTests(CustomLiveTestCase):

    fixtures = [
        'account_extras/fixtures/test_socialapp_data.json',
        'membership/fixtures/basic/plan.json',
    ]

    def setUp(self):
        pass

    @classmethod
    def setUpClass(cls):
        super(MembershipTests, cls).setUpClass()
        user = User.objects.create_user(
            TEST_USER_USERNAME,
            TEST_USER_EMAIL,
            TEST_USER_PASSWORD
        )

    def test_signup(self):
        print "users: ", User.objects.all()
4

3 に答える 3

17

データベースは、テスト クラスではなく、すべてのテスト メソッドで破棄され、再ロードされます。したがって、ユーザーは毎回失われます。そうしsetUpないでくださいsetUpClass

于 2013-02-20T16:36:58.237 に答える
14

LiveServerTestCase を使用しているため、テストケースを実行するたびにデータベースを作成および破棄する (テーブルを切り捨てる) TransactionTestCase とほぼ同じです。

したがって、LiveServerTestCase でグローバル データを処理することはできません。

于 2013-02-21T15:39:25.793 に答える