2016-08-02 83 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 e所需的User集。


至於測試,希望有人能寫的東西在適當的文檔,因爲有很多我想了解它,但是這通常是我怎麼樣去了解它:

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你的測試,讓他們迅速。每次只使用--keepdb我都沒有發現任何缺點,因爲它似乎在需要時更新數據庫。

希望這足以讓你開始。祝你好運,快樂的測試!