django单元测试中的原始sql查询

时间:2015-01-21 13:09:11

标签: sql django testing

我在代码中编写了一些自定义SQL选择查询 - 我们使用的是postgresql。事实证明,我的unittests区域失败,因为测试数据库不包含实际数据。为了说明这个事实,我写了这个小测试用例:

from django.db import connection
from django.test import TestCase

from highlights.models import Feature


class TestRaw(TestCase):
    def setUp(self):
        Feature(username="me", feature=True).save()

    def test_raw(self):
        # this check passes
        self.assertEqual(1, Feature.objects.all().count())

        # raw queries do not, 1 != 0
        with connection.cursor() as c:
            c.execute("SELECT count(*) FROM highlights_flag")
            r = c.fetchone()
            self.assertEqual(1, r[0])

原始sql查询未看到存储在TestCase类的setUp方法中的Feature对象。我还确认psql测试数据库是空的。

我认为django的测试框架为每个测试用例创建一个新的db事务,并在完成后回滚它 - 只是猜测。

您是否知道如何使我的自定义SQL代码可测试。换句话说:我可以做些什么让这个测试用例起作用吗?

由于

1 个答案:

答案 0 :(得分:2)

您正在从highlights_flag表中进行选择,但模型名为Feature。可能是您应该将查询更改为:

SELECT count(*) FROM highlights_feature