2013-07-03 20 views
5

la domanda è piuttosto semplice: non posso usare self.assertRaises in un test di Django 1.5 unit.Come usare assertRaises nei test delle unità Django correttamente?

Mi piacerebbe davvero verificare che quando si tenta di eliminare un provider da un database che non esiste, viene sollevato un LookupError.

Come potete vedere, ho una classe ProviderDAO, dove definisco come i provider devono essere cancellati. Poi chiamo semplicemente questo metodo, delete_provider(), nella classe di test dell'unità ProviderManagerTests. Ho delineato tutte le possibilità nel codice, ea questo punto sono venuto qui per le risposte (ho letto i suggerimenti nelle domande correlate ma non c'è nulla che faccia il trucco) Sto usando python 2.7.5 Grazie!

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

e la traccia stack:

====================================================================== 
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

Hai un'altra 'provider_manager.delete_provider ('398.236.503.462.063')' nel vostro codice che non si trova all'interno del blocco di self.assertRaises (..). – falsetru

+0

Alrighty bene mi sento stupido. Grazie!!!! – user798719

risposta

7

A proposito, si potrebbe scrivere in questo modo:

self.assertRaises(LookupError, provider_manager.delete_provider, '398236503462063') 
Problemi correlati