6

質問は非常に簡単です。Django 1.5 単体テストで self.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)
4

1 に答える 1

8

ちなみに、こんな書き方もできます。

self.assertRaises(LookupError, provider_manager.delete_provider, '398236503462063')
于 2013-07-29T09:55:00.387 に答える