首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用django_nose和django动态夹具优化样例django模型的建立和拆卸

用django_nose和django动态夹具优化样例django模型的建立和拆卸
EN

Stack Overflow用户
提问于 2012-09-19 01:22:36
回答 5查看 1.6K关注 0票数 3

鉴于我的模式如下:

代码语言:javascript
复制
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文件中,并将所有可安装的文件放在适当的位置。

要像上面那样生成一个模型,测试应该是

代码语言:javascript
复制
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

如果我写

代码语言:javascript
复制
class AuthorModelTest(TestCase):

   def test_some_stuff()             

我需要一些固定的价值。以下是我所提出的问题:

我怎样才能让我的夹具保持干燥。意味着不在每个函数中从G创建图书和作者夹具?

django_nose有助于优化setUp和tearDown方法并提高速度,我如何在这里使用它们?仅仅是放*django_nose.FastFixtureTestCase*就能解决setUp tearDown的痛苦?还是我需要使用TransactionTestCase?如何优化上述夹具和测试?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-27 09:25:50

TransactionTestCase帮助您保存每个测试的整个数据库刷新,它希望您从一个未损坏的数据库开始,您可以使用任何夹具生成器来生成它。然而,TransactionTestCase使数据库变得杂乱无章,django-鼻子可以帮助您优化它。但是django-鼻子有另一个测试运行程序,FastFixtureTestCase可以帮助您优化setUp和tearDown。

如前所述,您可以使用任何夹具生成,如果您希望django的优点-鼻子使用FastFixtureTestCase,它将帮助您优化IO时间。

票数 0
EN

Stack Overflow用户

发布于 2012-11-13 00:16:59

Django动态夹具的最新版本包括一个Django鼻插件,以方便创建全局固定装置。看看这是否对你有帮助。

票数 4
EN

Stack Overflow用户

发布于 2012-09-26 20:56:30

FastFixtureTestCase用于快速的夹具处理,在这种情况下根本帮不上忙。

使用django_dynamic_fixture或factory_boy (我个人使用),总是只创建测试所需的少量对象,即使有可能--完全省略数据库(例如,只测试与其他模型无关的模型方法)是最快的方法。

此外,如果数据库正在减慢您的速度,尝试使用常规数据库进行测试。我知道测试中的sqlite应该是快速的,因为它是在内存中运行的,但是它仍然比一般postgres/mysql数据库慢得多。您还可以在django-鼻子中启用REUSE_DB选项,这将使测试启动和关闭速度更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12487337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档