如何为新的第三方Django库编写单元测试

时间:2013-02-03 18:38:52

标签: django unit-testing mocking django-apps

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

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

1 个答案:

答案 0 :(得分:3)

到目前为止,我可以看到两种选择。

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

选项2(我选择的):在我的tests模块中声明测试模型。按照建议here并在测试syncdb方法中触发setUp来创建表格。适合测试,这是它的样子:

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