2013-07-03 6 views
5

सवाल बहुत सरल है: मैं Django 1.5 इकाई परीक्षण में self.assertRaises का उपयोग नहीं कर सकता।Django इकाई परीक्षण में assertRaises का सही तरीके से उपयोग कैसे करें?

मैं वास्तव में यह सत्यापित करना चाहता हूं कि जब आप किसी डेटाबेस से प्रदाता को हटाने का प्रयास नहीं करते हैं, तो एक लुकअप त्रुटि उठाई जाती है।

जैसा कि आप देख सकते हैं, मेरे पास एक प्रदाता डीओ कक्षा है, जहां मैं परिभाषित करता हूं कि प्रदाताओं को कैसे हटाया जाना है। फिर मैं यूनिट टेस्ट क्लास ProviderManagerTests में इस विधि, delete_provider() को बस कॉल करता हूं। मैंने कोड में सभी संभावनाओं को रेखांकित किया है, और इस बिंदु पर मैं यहां उत्तर के लिए आया हूं (मैंने संबंधित प्रश्नों में सुझाव पढ़े हैं लेकिन कुछ भी चाल नहीं कर रहा है) मैं अजगर का उपयोग कर रहा हूं 2.7.5 धन्यवाद!

class ProviderManager(models.Manager): 
    def delete_provider(self, provider_id): 
     matching_providers = Provider.objects.filter(providerId=provider_id) 
     print 'delete provider method matching providers %s ' % matching_providers 
     print 'delete provider method matching providers %s ' % matching_providers.count() 
     if matching_providers.count() > 0: 
      matching_providers.delete() 
     elif matching_providers.count() == 0: 
      raise LookupError('No deletion; no providers matching this id') 

class ProviderManagerTests(TestCase): 
    def test_delete_nonexistent_provider(self): 
     provider_manager = ProviderManager() 
     someRoles = Role(name='boss') 
     someRoles.save() 
     someSpecialties = Specialty(name='senior care') 
     someSpecialties.save() 
     provider_manager.delete_provider('398236503462063') 
     #self.assertIsNone(provider,'provider should be none') 
     #self.assertTrue(Provider.objects.filter(providerId='123456') == 0) 
     ###self.assertRaises(LookupError,provider_manager.delete_provider, providerId='398236503462063') 
     #self.assertRaises(LookupError,provider_manager.delete_provider, provider_id='398236503462063') 
     #self.assertRaises(LookupError,lambda: provider_manager.delete_provider,provider_id='234234234') 
     #self.assertRaises(LookupError,lambda: provider_manager.delete_provider(provider_id='234234234')) 
     # with self.assertRaises(LookupError): 
     #  provider_manager.delete_provider(provider_id='398236503462063') 

     with self.assertRaises(LookupError): 
      provider_manager.delete_provider('398236503462063') 

और ढेर ट्रैक:

====================================================================== 
ERROR: test_delete_nonexistent_provider (edu.tests.ProviderTests) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/Users/tests.py", line 68, in test_delete_nonexistent_provider 
    provider_manager.delete_provider('398236503462063') 
    File "/Users/models.py", line 92, in delete_provider 
    raise LookupError('No deletion; no providers matching this id') 
LookupError: No deletion; no providers matching this id 

---------------------------------------------------------------------- 
Ran 14 tests in 0.306s 

FAILED (errors=1) 
+6

आप किसी अन्य 'provider_manager.delete_provider है ('398236503462063')' अपने कोड जो 'self.assertRaises (..)' ब्लॉक के साथ नहीं है। – falsetru

+0

ठीक है मैं मूर्ख महसूस करता हूँ। धन्यवाद!!!! – user798719

उत्तर

7

वैसे, अगर आप इस तरह लिख सकते हैं: में

self.assertRaises(LookupError, provider_manager.delete_provider, '398236503462063') 
संबंधित मुद्दे