2

これに頭を悩ませます。モデルは真実のようです。理論的には、コメントされたすべての順列が機能するはずです---しかし、ユーザーを正常に取得できるのは.filterと.allだけです。.getは機能しません。.filterまたは.all----のいずれかを使用して処理できますが、なぜ機能しないのですか?

この場合、直接SQLクエリが100%機能することを繰り返します。すべてのインポートが実行され、低レベルで正常に機能しています。ここでも、フィルターは機能しますが、すべてが機能しますが、何らかの理由で失敗します。

class UserModelTest(TestCase):
def test_getUserByUsername(self):
    sanity = True
    try:
        #u = User.objects.filter(username='wadewilliams')
        u = User.objects.get(username='wadewilliams')
        #u = User.objects.get(pk=15773)
        #u = User.objects.all()
    print u
    except User.DoesNotExist:
        sanity = False

    self.assertEqual(sanity, True)

...フィルターまたはすべてのコメントを外さない限り、そのテストは失敗します...両方が取得されます。

そしてモデル...

class User(models.Model):
    userid = models.IntegerField(primary_key=True, db_column='userID')
    username = models.CharField(max_length=135)
    realname = models.CharField(max_length=150, db_column='name')
    email = models.CharField(max_length=765, blank=True)

class Meta:
    db_table = u'users'

def __unicode__(self):
    return self.username + ' (' + self.email + ')'
4

1 に答える 1

2

テストスイートは空白のモックデータベースを作成するため、本番/開発データベースに存在していてもユーザーは見つかりません。

ドキュメントから:テストの実行時に本番データベースからデータを検索しますか?モジュールのコンパイル時にコードがデータベースにアクセスしようとすると、テストデータベースがセットアップされる前にこれが発生し、予期しない結果が生じる可能性があります。たとえば、モジュールレベルのコードでデータベースクエリがあり、実際のデータベースが存在する場合、本番データがテストを汚染する可能性があります。とにかく、そのようなインポート時のデータベースクエリをコードに含めることは悪い考えです-これを行わないようにコードを書き直してください。

于 2012-11-22T05:46:07.623 に答える