我终于决定为我的所有代码创建单元测试。那就是我正在尝试根据我的模型创建灯具来测试我的功能。
我使用dumpdata命令创建了一个json fixture,并将它放在我的app上的fixtures目录下。以下是我测试的代码:
import unittest
from mysite.myapp.models import Post
class RatingTestCase(unittest.TestCase):
fixtures = [
'posts.json',
]
def test_me(self):
p = Post.objects.all()
self.assertTrue(p)
我在Arch Linux机器上使用以下命令运行我的测试:
python2.7 manage.py test myapp
它创建一个sqlite数据库并安装所有表和indeces,但最后它说没有找到夹具,它说我的测试失败,因为它没有找到任何数据。
我正在运行Django开发版的最新版本,并注意到根据文档,我应该使用以下方法导入unittest:
from django.utils import unittest
然而,当我这样做时,它抱怨无法导入unittest。这就是我导入的原因 unittest直接来自我的python路径。
我之前尝试过模拟django模型对象,但我认为使用fixture来测试Django应用比使用mock库更好。知道如何加载灯具吗?
提前致谢。
编辑:如果我将我的灯具名称更改为initial_data.json,它将在每次运行测试时加载它。但是,我仍然需要有多个灯具名称来运行不同的测试。
编辑:我通过以下方式导入TestCase来实现它:
from django.test import TestCase
答案 0 :(得分:5)
有几件事可能会有所帮助:
答案 1 :(得分:0)
您是否检查过灯具所在的路径是否可用:
settings.FIXTURE_DIRS = ('/path/to/proj_folder/fixtures/',)
答案 2 :(得分:0)
我有名字问题。即使我将文件放在app文件夹下的fixture目录中,下面的代码也行不通。
fixtures = ['initial_data2.json']
然后我将import语句更改为刚刚工作的下面的语句。
来自django.test import TestCase
答案 3 :(得分:0)
我遇到了同样的问题,而且它对我起作用的原因是我的初始数据文件没有扩展名。
我做了:
manage.py dumpdata > initial_data
manage.py loaddata initial_data
哪个不起作用,因为在initial_data上没有扩展名,但是,这确实有效:
mv initial_data initial_data.json
manage.py loaddata --verbosity=2 initial_data.json
答案 4 :(得分:-1)
只是为了确认TestCase的import语句,它会破坏查找任何灯具 但是在所有其他方面都可以工作,所以不会抛出任何错误,因为它尝试没有夹具加载
from django.utils.unittest import TestCase
...不要使用它......如建议使用
from django.test import TestCase