鉴于我的模型如下:
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,它可以帮助我很好地运行和管理测试。 安装测试运行程序设置.py把所有可安装的东西归档并放好。在
要生成如上所述的模型,测试应该
^{pr2}$如果我写信
class AuthorModelTest(TestCase):
def test_some_stuff()
我需要一些固定装置值。 以下是我的疑问:
我如何保持我的夹具一代干燥。这意味着不在每个函数中从G
创建book和author fixture?在
django_nose有助于优化设置和拆卸方法并提高速度,如何在这里使用它们?只不过是把django_机头快速固定试验箱*设置会自己处理吗?或者我需要使用TransactionTestCase?如何优化上述夹具和测试?在
最新版本的Django Dynamic Fixture包含一个Django Nose plugin,以便于创建全局夹具。看看这对你有没有帮助。在
TransactionTestCase
帮助您保存每个测试保存一个完整的数据库刷新,它要求您从一个未更正的数据库开始,您可以使用任何fixture生成器生成它。TransactionTestCase
然而,django nose会帮助您优化数据库。然而,django nose还有另一个测试运行程序FastFixtureTestCase
可以帮助您优化设置和拆卸。在如前所述,您可以使用任何fixture生成,如果您想要django nose的优点,请使用
FastFixtureTestCase
,它将帮助您优化IO时间。在FastFixtureTestCase用于快速夹具处理,在这种情况下它根本没有帮助。在
使用django_dynamic_fixture或factory_boy(我个人使用),并且总是只创建测试所需的尽可能小的对象,即使可能-完全忽略数据库(例如,当只测试与其他模型无关的模型方法时)是最快的方法。在
另外,如果数据库是减慢您的速度的原因,请尝试使用常规数据库进行测试。我知道sqlite在测试中应该很快,因为它是在内存中运行的,但是它仍然比普通的postgres/mysql数据库慢得多。您还可以在django nose中启用REUSE_DB选项,这将使测试的启动和关闭更快。在
相关问题 更多 >
编程相关推荐