2013-02-20 2 views
9

私はDjango 1.4のLiveServerTestCaseをSeleniumテストに使用しており、setUpClassクラスメソッドに問題があります。私が理解する限り、ユニットテストを実行する前にMembershipTests.setUpClassが一度実行されます。Django LiveServerTestCase:setUpClassメソッドで作成されたユーザーは、test_methodでは使用できません。

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() 

答えて

9

LiveServerTestCaseを使用しているため、実行されたすべてのテストケースのデータベースを作成して破棄します(TransactionTestCaseとほぼ同じです)。

本当にLiveServerTestCaseでグローバルデータを作成することはできません。

+0

LiveServerTestCaseを使用してユーザーを作成してログインするにはどうすればよいですか? SQLiteデータベースでsetUpにアカウントを作成するには:memory:手動でコミットしても機能しません。 – dotz

12

データベースが取り壊さ、すべての試験方法ではなく、テストクラスに再ロードされます。したがって、毎回あなたのユーザーは失われます。 setUpではなく、setUpClassです。

+0

ありがとうございました。それは[この回答](http://stackoverflow.com/a/14038336/378638)が間違っていることを意味するのですか、それを誤解していますか?テストクラス内のすべてのテストメソッドで使用できるように、テストレコードを1か所に作成することはできませんか?私はすべてのテストメソッドで同じユーザレコードを使いたいと思っています。 '' setUp''はそれぞれのテストメソッドの前に再作成されます。 –

関連する問題