鉴于我的模式如下:
class Author(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToManyField(Author) 我正在使用django-动态夹具为测试轻松地生成模型夹具。我还使用了鼻子,它帮助我很好地运行和管理测试。将test_runner设置在settings.py文件中,并将所有可安装的文件放在适当的位置。
要像上面那样生成一个模型,测试应该是
from django_dynamic_fixture import G
class BookModelTest(TestCase):
def test_book_creation(self):
author1 = G(Author)
author2 = G(Author)
book = G(Book, author=[author1])
book_obj = Book.objects.all()
self.assertEquals(book_obj.count(), 1)
self.assertEquals(list(book_obj[0].author), [author1])
self.assertEquals(book_obj[0].title, book.title)
self.assertNotEquals(list(book_obj[0].author), [author1])
def another_test(self):
"Here as well i need the same, author1, author2 and book如果我写
class AuthorModelTest(TestCase):
def test_some_stuff() 我需要一些固定的价值。以下是我所提出的问题:
我怎样才能让我的夹具保持干燥。意味着不在每个函数中从G创建图书和作者夹具?
django_nose有助于优化setUp和tearDown方法并提高速度,我如何在这里使用它们?仅仅是放*django_nose.FastFixtureTestCase*就能解决setUp tearDown的痛苦?还是我需要使用TransactionTestCase?如何优化上述夹具和测试?
发布于 2012-09-27 09:25:50
TransactionTestCase帮助您保存每个测试的整个数据库刷新,它希望您从一个未损坏的数据库开始,您可以使用任何夹具生成器来生成它。然而,TransactionTestCase使数据库变得杂乱无章,django-鼻子可以帮助您优化它。但是django-鼻子有另一个测试运行程序,FastFixtureTestCase可以帮助您优化setUp和tearDown。
如前所述,您可以使用任何夹具生成,如果您希望django的优点-鼻子使用FastFixtureTestCase,它将帮助您优化IO时间。
发布于 2012-11-13 00:16:59
Django动态夹具的最新版本包括一个Django鼻插件,以方便创建全局固定装置。看看这是否对你有帮助。
发布于 2012-09-26 20:56:30
FastFixtureTestCase用于快速的夹具处理,在这种情况下根本帮不上忙。
使用django_dynamic_fixture或factory_boy (我个人使用),总是只创建测试所需的少量对象,即使有可能--完全省略数据库(例如,只测试与其他模型无关的模型方法)是最快的方法。
此外,如果数据库正在减慢您的速度,尝试使用常规数据库进行测试。我知道测试中的sqlite应该是快速的,因为它是在内存中运行的,但是它仍然比一般postgres/mysql数据库慢得多。您还可以在django-鼻子中启用REUSE_DB选项,这将使测试启动和关闭速度更快。
https://stackoverflow.com/questions/12487337
复制相似问题