2016-08-02 27 views
0

良いテストのためにコードを書くのがベストプラクティスであると思います。例えば。Djangoとモデルメソッドのテスト

class Visits(models.Model): 
    user = models.ForeignKey(User) 
    visited_at = models.DateTimeField() 

    def __unicode__(self): 
     return "{}-{}".format(self.user, self.visited_at) 

そして、私は最後の日から現行ユーザーの訪問のみを取得する機能が必要です。私は何をすべきか?これを見てテストしますか?またはモデルメソッドを作る?テストするのに最適なのは何ですか?

答えて

0

まず、モデルマネージャを使用することができます。次のようなものになります。

(これはテストされていない、あなたはクエリセットを台無しに必要がある場合があります):

managers.py単に

from django.db import models 

class Visited(models.Manager): 

    def on_day(self, user, date): 
     qs = self.model.objects.filter(user=user, visited_at=date) 
     return qs 

models.py

from django.db import models 
from .managers import Visited 

class Visits(models.Model): 
    user = models.ForeignKey(User) 
    visited_at = models.DateTimeField() 
    objects = models.Manager()  
    visited = Visited() 

    def __unicode__(self): 
     return "{}-{}".format(self.user, self.visited_at) 

userdate情報を返す必要があります希望するUserセット。テスト用として


私はそれについて学びたいのですがたくさんありますので、うまくいけば誰かが、ドキュメント内の適切な何かを書くことができますが、これは、私はそれについて移動したいとどのように一般的である:

スピーディーにそれらを保つために--keepdbであなたのテストtests.py

import datetime 
from django.test import TestCase 

class TestData(TestCase): 
    yesterday = datetime.date.today() - datetime.timedelta(days=1) 

    @classmethod 
    def setUpTestData(cls): 

     cls.User1 = User.objects.create(
      name="Anon1" 
     ) 
     cls.User2 = User.objects.create(
      name="Anon2" 
     ) 

     cls.Visit1 = Visits.objects.create(
      user=cls.user1, 
      visited_at=self.yesterday, 
     ) 
     cls.Visit2 = Visits.objects.create(
      user=cls.user2, 
      visited_at=datetime.date(2016,7,28), 
     ) 
     cls.Visit3 = Visits.objects.create(
      user=cls.user2, 
      visited_at=datetime.date(2016,8,1), 
     ) 

class SalesRecordTest(TestData): 

    def test_varieties_sold(self): 
     self.assertQuerysetEqual(Visits.visited.on_day(self.yesterday, self.user), ["<User: Anon1>"]) 
     self.assertNotIn("Anon2", str(Visits.visited.on_day(self.yesterday, self.user))) 

旗。毎回--keepdbを使用するだけでは不都合がないことがわかりました。必要なときにいつでもデータベースを更新するようです。

これで十分です。幸運と幸せなテスト!

関連する問題