2012-04-08 10 views
16

मैं अभी भी Django 1.2.1 का उपयोग कर रहा हूं, और मुझे लगता है कि नए Django के साथ हम import unittest नहीं करते हैं और फिर unittest.TestCase करते हैं।django.test.TestCase बनाम unittest बनाम django.utils.unittest.TestCase

चित्रण

import unittest 
class TestThis(unittest.TestCase): 

from django.utils.unittest import TestCase 
class TestThis(TestCase): 

from django.test import TestCase 
class TestThis(TestCase): 

PyCon2011 talk के अनुसार, दूसरा एक थोड़ा अधिक सक्षम है।

यहाँ diagram संबंध को दर्शानेवाला है:

enter image description here

तो django.utils.unittest और या तो unittest या unittest2 से django.test प्राप्त करती हैं।

मुझे यकीन नहीं है कि निम्नलिखित सही है या नहीं। कृपया संपादन में मदद करें।

________________________________________________________________ 
| Name     | Django Version | Python Version | 
----------------------------------------------------------------- 
| unittest    |  >= 1.0  |  >= 2.6  | 
----------------------------------------------------------------- 
| django.utils.unittest |  >= 1.3  |  ??   | 
----------------------------------------------------------------- 
| django.test   |  >= 1.0  |  >= 2.6  | 
| - SimpleTestCase   >= 1.4    >= 2.7  | 
| - LiveServerTestCase  >= 1.4    >= 2.7  | 
----------------------------------------------------------------- 

दक्षता के मामले में, तीन में से कौन सा बेहतर है? जब वे परीक्षण करते हैं तो कई Django डेवलपर्स नकली होते हैं, इसलिए कभी-कभी डेटाबेस भी आवश्यक नहीं होता है। क्या हम manage.py test myapp.MyClass चलाते समय टेबल बनाने नहीं बनाते हैं? पुराने संस्करण (1.3 से पहले) के लिए, कौन सा बेहतर है?

उत्तर

12

Django के TestCase कुछ अतिरिक्त सुविधाओं के साथ unittest.TestCase बढ़ाता है:

  • जुड़नार के स्वत: लोड हो रहा है।
  • एक लेनदेन में प्रत्येक परीक्षण लपेटता है।
  • एक टेस्ट क्लाइंट उदाहरण बनाता है।
  • रेडरेक्शन और फॉर्म त्रुटियों जैसी चीजों के परीक्षण के लिए Django-विशिष्ट दावे।

आम तौर पर बोलते हुए, आपको सबसे अधिक डैंजो के टेस्टकेस उप-वर्गों का उपयोग करना चाहिए। आमतौर पर यह django.test.TestCase होगा, जो दक्षता के लिए, डीबी लेनदेन में परीक्षण को लपेटता है और डीबी में परीक्षण को 'पूर्ववत' करने के लिए रोलबैक का उपयोग करता है। यदि आपको अपने परीक्षण में लेन-देन को मैन्युअल रूप से प्रबंधित करने की आवश्यकता है, तो आपको django.test.TransactionTestCase का उपयोग करना होगा, क्योंकि आप लेन-देन के भीतर लेनदेन शुरू/रोलबैक नहीं कर सकते हैं।

django.test.TestCase का उपयोग करने के लिए कुछ मामूली चेतावनी हैं, अधिक जानकारी के लिए here नोट देखें।

भी

:

तुम सिर्फ एक तरीका है अपने परीक्षण में तेजी से चलाने के लिए देख रहे हैं, running your tests in memory पर एक नजर है, और (यदि आप दक्षिण प्रयोग कर रहे हैं), SOUTH_TESTS_MIGRATE = False सेट एक का उपयोग करने के लिए दक्षिण बताने के लिए (बहुत तेजी से) syncdb माइग्रेशन चलाने के बजाए परीक्षण डीबी बनाते समय।

+0

मैंने एक django ऐप बनाया है, और मेरे पास मेरी test.py फ़ाइल में है, * टेस्टकेस * से विरासत में एक उदाहरण वर्ग है और मैंने केवल * testjase * * django.test * से आयात किया है। अगर मैं * unittest.TestCase * आयात करता हूं, तो क्या यह एक संघर्ष होगा? – eLRuLL

+3

@eLRuLL हाँ, लेकिन आप "django.test आयात टेस्टकेज़ से DjangoTestCase" या संघर्ष को हल करने के समान कुछ कर सकते हैं –

+0

महान टिप, मुझे यह नहीं पता था। – eLRuLL

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