私のテストでは、完全なケースをテストするだけでなく、特にエッジ ケースとエラー条件をテストします。そのため、いくつかの一意性制約が確実に機能するようにしたいと考えました。
私のテストとテスト フィクスチャはかなり複雑ですが、カスタム モデルを使用しない次の例まで、問題を突き止めることができました。動作を再現するには、コードを tests.py に保存し、django テスト ランナーを実行します。
from django.contrib.auth.models import User
from django.db import IntegrityError
from django.test import TransactionTestCase
class TransProblemTest(TransactionTestCase):
def test_uniqueness1(self):
User.objects.create_user(username='user1', email='user1@example.com', password='secret')
self.assertRaises(IntegrityError, lambda :
User.objects.create_user(username='user1', email='user1@example.com', password='secret'))
def test_uniqueness2(self):
User.objects.create_user(username='user1', email='user1@example.com', password='secret')
self.assertRaises(IntegrityError, lambda :
User.objects.create_user(username='user1', email='user1@example.com', password='secret'))
単一のテスト メソッドを持つテスト クラスは機能しますが、2 つの同一のメソッド実装では失敗します。最初のテストで例外がスローされると、Django テスト環境が破壊され、以降のすべてのテストが失敗します。
Ubuntu 10.04、Postgres 8.4、psycopg2 で Django 1.1 を使用しています。
問題は Django 1.2 でもまだ存在しますか?
それは既知のバグですか、それとも何か不足していますか?