我在代码中编写了一些自定义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代码可测试。换句话说:我可以做些什么让这个测试用例起作用吗?
由于
答案 0 :(得分:2)
您正在从highlights_flag
表中进行选择,但模型名为Feature
。可能是您应该将查询更改为:
SELECT count(*) FROM highlights_feature