2013-02-20 9 views
9

मैं सेलेनियम परीक्षण के लिए Django 1.4 के LiveServerTestCase उपयोग कर रहा हूँ और setUpClass वर्ग विधि के साथ परेशानी हो रही हूँ। जहां तक ​​मैं समझता हूं कि MembershipTests.setUpClass यूनिट परीक्षण चलाने से पहले एक बार चलाया जाता है।Django LiveServerTestCase: setUpClass विधि में बनाया गया उपयोगकर्ता test_method में उपलब्ध नहीं है?

मैंने MembershipTests.setUpClass में डेटाबेस में उपयोगकर्ता को जोड़ने के लिए कोड डाला है, लेकिन जब मैं MembershipTests.test_signup परीक्षण चलाता हूं तो परीक्षण उपयोगकर्ता को परीक्षण डेटाबेस में जोड़ा नहीं गया है। मैं गलत तरीके से क्या कर रहा हूं? मैं उम्मीद उपयोगकर्ता मैं setUpClass में बनाए गए सभी इकाई परीक्षण भर में उपलब्ध होगी।

अगर मैं MembershipTests.setUp में उपयोगकर्ता निर्माण कोड डाल दिया और चलाने MembershipTests.test_signup मैं उपयोगकर्ता देख सकते हैं, लेकिन यह रन नहीं करना चाहते से पहले setUp के रूप में हर इकाई परीक्षण है। आप देख सकते हैं, मैं अपने परीक्षण (test_utils.CustomLiveTestCase) के सभी भर में बुनियादी कार्यक्षमता जोड़ने के लिए एक कस्टम LiveServerTestCase वर्ग का उपयोग करें। मुझे संदेह है कि मेरे मुद्दे के साथ इसका कुछ संबंध है।

अग्रिम धन्यवाद।

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 जो बनाता है और डेटाबेस को नष्ट कर देता (टेबल ट्रंकेटस) के लिए हर testcase भाग गया।

तो तुम सच में LiveServerTestCase के साथ वैश्विक डेटा नहीं कर सकते।

+0

कोई विचार, मैं उपयोगकर्ता कैसे बना सकता हूं और फिर इसे लाइवसेवरटेस्टकेस के साथ लॉग इन कर सकता हूं? SQLite डेटाबेस के साथ सेटअप में खाता बनाना: मेमोरी: काम नहीं करता है, भले ही मैं मैन्युअल रूप से प्रतिबद्ध करता हूं। – dotz

12

डेटाबेस नीचे फटे और हर परीक्षा पद्धति पर पुनः लोड, परीक्षण वर्ग पर नहीं है। तो आपका उपयोगकर्ता हर बार खो जाएगा। setUpsetUpClass में ऐसा करें।

+0

अपने जवाब के लिए धन्यवाद। क्या इसका मतलब है कि [यह उत्तर] (http://stackoverflow.com/a/14038336/378638) गलत है या क्या मैं इसे गलत समझ रहा हूं? क्या टेस्ट क्लास में सभी परीक्षण विधियों में उपयोग के लिए एक स्थान पर परीक्षण रिकॉर्ड बनाना संभव नहीं है? मैं सभी परीक्षण विधियों में एक ही उपयोगकर्ता रिकॉर्ड का उपयोग करना चाहता हूं और 'सेटअप'' प्रत्येक के सामने इसे पुनर्निर्मित करता है। –

संबंधित मुद्दे