在Django测试南迁

在Django测试南迁,django,django-south,Django,Django South,有人知道在编写迁移之后测试迁移本身的方法吗?在我的数据迁移过程中,我发现了很多愚蠢而微妙的错误,比如默认值的True而不是False,错误的反规范化,等等 默认的南方约定是以数字开始迁移,因此您甚至不能在不使用\uuuuu import\uuuu的情况下导入它们。有没有人遇到过类似的问题?人们如何解决这些问题 最明显的方法是将迁移逻辑保存在一个单独的导入模块中并进行测试,但这有点笨重。我对南方相当陌生,但我使用它的几次,我也使用了单元测试,然后,./manage.py test也执行了迁移,这已

有人知道在编写迁移之后测试迁移本身的方法吗?在我的数据迁移过程中,我发现了很多愚蠢而微妙的错误,比如默认值的
True
而不是
False
,错误的反规范化,等等

默认的南方约定是以数字开始迁移,因此您甚至不能在不使用
\uuuuu import\uuuu
的情况下导入它们。有没有人遇到过类似的问题?人们如何解决这些问题


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

我对南方相当陌生,但我使用它的几次,我也使用了单元测试,然后,./
manage.py test
也执行了迁移,这已经发现了很多bug


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

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

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
好的,有点笨重。但它似乎奏效了

[编辑] 再想想,我发现了一个更好的解决方案:将测试放入数据迁移本身。由于迁移是一次性代码,因此不必反复测试

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

为什么不简单地编写测试新模式的单元测试呢?e、 例如,在不指定值的情况下创建一个模型,并检查是否使用了正确的默认值。@Michael:对于SchemaMigration来说,这是可以的,但它不会在数据迁移中发现错误。在这种情况下,您可以创建一个用于迁移测试的数据库,填充样本数据,运行迁移,并测试最终的值。不知道,你把不应该放在一起的东西混在一起,测试是一回事,迁移是另一回事。。。。