2016-08-02 4 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을 사용하는 것이 어떤 단점도 발견하지 못했다. 필요할 때마다 데이터베이스를 업데이트하는 것으로 보인다.

시작하기에 충분합니다. 행운과 행복 테스트!