我正在使用Django 1.4的LiveServerTestCase进行 Selenium 测试,并且setUpClass类方法遇到问题。据我了解,MembershipTests.setUpClass在单元测试运行之前运行了一次。

我已经在MembershipTests.setUpClass中放入了将用户添加到数据库中的代码,但是当我运行MembershipTests.test_signup test时,没有用户被添加到测试数据库中。 我做错了什么? ,我希望我在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()

最佳答案

由于您使用的是LiveServerTestCase,因此它几乎与TransactionTestCase相同,后者为每次运行的测试用例创建和销毁数据库(截断表)。

因此,您真的不能使用LiveServerTestCase来处理全局数据。

关于python - Django LiveServerTestCase : User created in in setUpClass method not available in test_method?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14984683/

10-12 16:50