Django模型缓存?如何在测试中禁用

时间:2010-02-12 11:31:32

标签: django unit-testing django-models

首先,我的tests.py

的代码
def test_get_current(self):
    m = Member.objects.create(...)
    q = Question.objects.create(name="q1", text="q1", start_datetime=self.day_before, close_datetime=self.day_after, type=self.type)
    r = Response.objects.create(question=q, text='response')
    expected = q, None 
    #self.assertEquals(expected, Question.objects.get_current(m.id))

    q2 = Question.objects.create(name="q2", text="q2", start_datetime=self.day_before, close_datetime=self.day_after, type=self.type)
    #print Question.objects.all()
    #self.assertEquals(expected, Question.objects.get_current(m.id))
    MemberResponse.objects.create(member=m, response=r)
    print Question.objects.all().exclude(response__memberresponse__member=m)
    print Question.objects.all().exclude(response__memberresponse__member=m)

我的get_current函数出现了意想不到的结果,因此,我对它进行了评论并尝试通过打印函数内部使用的主查询集进行调试,并得到了奇怪的结果:

...
Installing index for ... model
[<Question: q1>, <Question: q2>]
[<Question: q2>]
.....
----------------------------------------------------------------------
Ran 5 tests in 3.125s

我想知道,为什么具有相同参数的QuerySet会返回第一个错误数据,但是通过下一次调用 - 正确并且如何避免它?

顺便说一下,django世界是否有类似于铁路工厂女孩用于创建测试数据的东西?

2 个答案:

答案 0 :(得分:2)

factory_boy是“基于thinkbot的factory_girl的灯具替代品。”

如果你来自Rails,你会发现它与factory_girl非常相似。推荐使用。

答案 1 :(得分:1)

  

django世界是否有与铁路工厂女孩类似的东西来创建测试数据?

我不太了解导轨,所以我真的不知道什么是“工厂女孩”。但是,Django允许你自动加载一个夹具进行测试。

documentation开始,您可以指定要加载的灯具。

class AnimalTestCase(TestCase):
    fixtures = ['mammals.json', 'birds']

    def setUp(self):
    # Test definitions as before.
    call_setup_methods()

    def testFluffyAnimals(self):
    # A test that uses the fixtures.
    call_some_test_code()

而且,哦,你可以使用python manage.py dumpdata

创建灯具

至于在开发期间禁用缓存而不影响代码,您应该使用“Dummy Caching”作为缓存支持。

documentation您可以通过以下设置变量让django使用此后端:

CACHE_BACKEND = 'dummy://'

通常将其放在开发系统的localsettings.py中。