2013-06-21 7 views
7

मैं Django में परीक्षण पर पूरी तरह से नया हूं। मैंने नाक और सेलेनियम इंस्टॉल करके शुरू किया है और अब मैं निम्नलिखित कोड (नीचे) का परीक्षण करना चाहता हूं यह एक एसएमएस संदेश भेजता है।Django नाक इस परीक्षा को कैसे लिखना है?

views.py

@login_required 
def process_all(request): 
    """ 
    I process the sending for a single or bulk message(s) to a group or single contact. 
    :param request: 
    """ 
    #If we had a POST then get the request post values. 
    if request.method == 'POST': 
     batches = Batch.objects.for_user_pending(request.user) 
     for batch in batches: 
      ProcessRequests.delay(batch) 
      batch.complete_update() 

    return HttpResponseRedirect('/reports/messages/') 

तो मैं कहां से शुरू करते हैं:

यह वास्तविक कोड है? मैंने अभी तक यह किया है ...

1) परीक्षण नामक एक फ़ोल्डर बनाया और init .py।

2) test_views.py नामक एक नई पायथन फ़ाइल बनाई गई (मुझे लगता है कि यह सही है)।

अब, मैं इस परीक्षा को लिखने के बारे में कैसे जा सकता हूं?

क्या कोई मुझे उपरोक्त दृश्य के लिए परीक्षण लिखने का उदाहरण दिखा सकता है?

आप :)

+0

https://docs.djangoproject.com/en/1.5/topics/testing/ & https://docs.djangoproject.com/en/1.5/topics/testing/overview/ –

उत्तर

14

सबसे पहले धन्यवाद, आप विचारों के परीक्षण के लिए selenium जरूरत नहीं है। सेलेनियम उच्च स्तरीय इन-ब्राउजर परीक्षण के लिए एक उपकरण है - जब आप वास्तविक उपयोगकर्ता को सिमुलेट करते हुए यूआई परीक्षण लिख रहे होते हैं तो यह अच्छा और उपयोगी होता है।

नाक एक उपकरण है जो स्वचालित परीक्षण खोज जैसी सुविधाओं को प्रदान करके makes testing easier है, कई सहायक कार्यों की आपूर्ति करता है। अपने django प्रोजेक्ट के साथ नाक को एकीकृत करने का सबसे अच्छा तरीका django_nose पैकेज का उपयोग करना है।

  1. हर बार जब आप चलाने python manage.py test <project_name> नाक अपने परीक्षण चलाने के लिए उपयोग किया जाएगा INSTALLED_APPS
  2. को django_nose जोड़ने फिर परिभाषित TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

,: आपको बस इतना करना है।


तो, यह विशेष दृश्य परीक्षण के बारे में बात, आप परीक्षण करना चाहिए:

  • login_required डेकोरेटर काम - दूसरे शब्दों में, अप्रमाणित उपयोगकर्ता प्रवेश पृष्ठ पर पुनः निर्देशित किया जाएगा
  • अगर request.method नहीं है पोस्ट, कोई संदेश नहीं भेजा गया + /reports/messages
  • पोस्ट विधि का उपयोग करते समय एसएमएस संदेश भेजना + /reports/messages
  • पर रीडायरेक्ट करें

परीक्षण पहले दो बयानों बहुत सीधी-सपाट है, लेकिन आदेश पिछले बयान है कि तुम क्या है Batch, ProcessRequests बारे में अधिक जानकारी प्रदान करने की आवश्यकता का परीक्षण करने और यह कैसे काम करता है। मेरा मतलब है, आप शायद परीक्षण के दौरान वास्तविक एसएमएस संदेश नहीं भेजना चाहते हैं - यह वह जगह है जहां mocking मदद करेगा।असल में, आपको मॉक करने की आवश्यकता है (फ्लाई पर अपने स्वयं के कार्यान्वयन के साथ प्रतिस्थापित करें) Batch, ProcessRequests ऑब्जेक्ट्स। यहाँ तुम क्या test_views.py में होना चाहिए का एक उदाहरण है:

from django.contrib.auth.models import User 
from django.core.urlresolvers import reverse 
from django.test.client import Client 
from django.test import TestCase 


class ProcessAllTestCase(TestCase): 
    def setUp(self): 
     self.client = Client() 
     self.user = User.objects.create_user('john', '[email protected]', 'johnpassword') 

    def test_login_required(self): 
     response = self.client.get(reverse('process_all')) 
     self.assertRedirects(response, '/login') 

    def test_get_method(self): 
     self.client.login(username='john', password='johnpassword') 
     response = self.client.get(reverse('process_all')) 
     self.assertRedirects(response, '/reports/messages') 

     # assert no messages were sent 

    def test_post_method(self): 
     self.client.login(username='john', password='johnpassword') 

     # add pending messages, mock sms sending? 

     response = self.client.post(reverse('process_all')) 
     self.assertRedirects(response, '/reports/messages') 

     # assert that sms messages were sent 

यह भी देखें:

आशा है कि मदद करता है।

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