【问题标题】:How to write unit tests for a new third-party Django library如何为新的第三方 Django 库编写单元测试
【发布时间】:2013-01-18 12:15:55
【问题描述】:

我正在制作一个 Django 应用程序库,旨在为我正在开发的游戏应用程序中的其他应用程序模型提供通用排行榜。我的库的客户应该扩展我正在创建的抽象基类并覆盖方法以提供代码以实际聚合对象。

我想保持这个图表应用程序自包含和松耦合,以便我可以轻松地将它分离并开源它,因此我正在尝试编写不依赖于外部任何模型的单元测试应用程序,即使应用程序的全部目的本质上是从外部应用程序中的模型聚合数据。我可以在应用程序自己的models.py 中创建一个虚拟模型,但这会导致为每个使用该库的项目创建一个未使用的表,这似乎并不理想。有没有理想的方法来做到这一点?

【问题讨论】:

    标签: django unit-testing mocking django-apps


    【解决方案1】:

    到目前为止,我可以看到两个选项。

    选项 1:创建非托管模型类,并在测试中手动创建和销毁数据库表。

    选项 2(我选择的):在我的 tests 模块中声明测试模型。按照建议here 并在测试setUp 方法中触发syncdb 来创建表。适合测试,如下所示:

    from django.core.management import call_command
    from django.db import models
    from django.test import TestCase
    
    class TestModel(models.Model):
        data = models.FloatField()
    
        class Meta:
            app_label = 'myapp'
    
    class LibraryTests(TestCase):
        def setUp(self):
            super(LibraryTests, self).setUp()
            models.register_models('myapp', TestModel)
            call_command('syncdb')
    

    【讨论】:

    • 我收到了AttributeError: module 'django.db.models' has no attribute 'register_models'
    猜你喜欢
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2014-07-14
    相关资源
    最近更新 更多