2013-07-03 9 views
5

質問はかなり簡単です:私はself.assertRaisesをDjango 1.5ユニットテストで使用することはできません。DjangoユニットテストでassertRaisesを正しく使用するには?

存在しないデータベースからプロバイダーを削除しようとすると、LookupErrorが発生することを確認したいと思います。

ご覧のとおり、プロバイダの削除方法を定義するProviderDAOクラスがあります。 次に、ユニットテストクラスProviderManagerTestsでこのメソッドdelete_provider()を呼び出します。 私はコード内のすべての可能性を概説しましたが、ここで私は答えに来ました(関連する質問の提案を読みましたが、何もそのトリックはありません) 私はPython 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') 
関連する問題