【问题标题】:Testing south migrations in Django在 Django 中测试南迁移
【发布时间】:2012-01-10 05:16:58
【问题描述】:

有谁知道在编写后测试迁移本身的方法吗?很多次在我的 DataMigrations 中,我发现了一些愚蠢的细微错误,例如 True 而不是 False 的默认值、错误的非规范化等。

默认的 South 约定是使用数字开始迁移,因此如果不使用 __import__,您甚至无法导入它们。有没有人遇到过类似的问题?人们如何解决它们?

最明显的方法是将迁移逻辑保存在单独的导入模块中并对其进行测试,但这有点笨拙。

【问题讨论】:

  • 为什么不简单地编写单元测试来测试新模式呢?例如,在不指定值的情况下创建模型,并检查是否使用了正确的默认值。
  • @Michael:模式迁移没问题,但它不会在数据迁移中发现错误。
  • 在这种情况下,您可以创建一个用于迁移测试的数据库、填充示例数据、运行迁移并测试最终值。

标签: django django-south


【解决方案1】:

我偶然发现了同样的问题。由于我没有找到对数据迁移进行测试的方法,因此我使用断言来检测损坏的数据:

from django.conf import settings

class MyModel(models.Model):
    stupid_error = models.BooleanField(default=False)

    def __init__(self, *args, **kwargs):
        super(MyModel, self).__init__(*args, **kwargs)
        if settings.DEBUG:
            assert not self.stupid_error

好吧,它有点笨拙。但它似乎有效。

[编辑] 再想一想,我找到了一个更好的解决方案:将测试放入 DataMigration 本身。由于迁移是一次性代码,因此无需反复测试。

class Migration(DataMigration):
    def forwards(self, orm):
        # lots of awesome migration code here
        # ...
        for m in orm.MyModel.objects.all():
            assert not m.stupid_error

【讨论】:

  • 不知道,你把不该混在一起的东西混在一起了,测试是一回事,迁移是另一回事......
【解决方案2】:

我对 South 还很陌生,但我用它的几次,我也使用了单元测试,然后,./manage.py test 也执行了迁移,这已经发现了很多错误。

但是,这可能不适用于所有情况(我认为执行这些迁移时测试数据库中没有数据)。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 2011-07-31
    • 2012-06-05
    • 2014-06-22
    • 2011-09-28
    • 2014-02-21
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多