ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 使用django_nose和django-dynamic-fixture优化样本django模型的设置和拆卸

2019-09-01 19:56:51  阅读:270  来源: 互联网

标签:python unit-testing django nose django-testing


鉴于我的模型如下:

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-dynamic-fixture轻松生成模型夹具进行测试.我也在使用django_nose,这可以帮助我很好地运行和管理测试.
在settings.py文件中设置test_runner并将所有可安装程序放在适当的位置.

要生成如上所述的模型,测试应该是

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()             

我需要一些固定值.
以下是我的查询:

如何让我的夹具生成DRY.意思是不是在每个函数中都从G创建书籍和作者装置?

django_nose有助于优化setUp和tearDown方法并提高速度,我如何在这里使用它们?只是把* django_nose.FastFixtureTestCase *放在一起会照顾setUp tearDown的痛苦吗?或者我需要使用TransactionTestCase吗?如何优化上述夹具并进行测试?

解决方法:

TransactionTestCase可以帮助您节省每次测试保存整个数据库刷新的时间,它希望您从未使用的数据库开始,您可以使用任何夹具生成器自由生成它.但是,TransactionTestCase会使数据库混乱,django-nose可帮助您优化数据库.但是django-nose有另一个测试运行器FastFixtureTestCase可以帮助你优化setUp和tearDown.

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

标签:python,unit-testing,django,nose,django-testing
来源: https://codeday.me/bug/20190901/1785651.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有