Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为新的第三方Django库编写单元测试_Django_Unit Testing_Mocking_Django Apps - Fatal编程技术网

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

如何为新的第三方Django库编写单元测试,django,unit-testing,mocking,django-apps,Django,Unit Testing,Mocking,Django Apps,我正在制作一个库作为Django应用程序,旨在为我正在开发的游戏应用程序中的其他应用程序模型提供通用排行榜。我的库的客户端应该扩展我正在创建的抽象基类,并重写方法,以提供实际聚合对象的代码 我想让这个charts应用程序保持自包含和松散耦合,这样我就可以轻松地将它剥离出来并将其开源,因此我尝试编写不依赖于外部应用程序中任何模型的单元测试,尽管该应用程序的全部目的是从外部应用程序中的模型中聚合数据。我可以在应用程序自己的models.py中创建一个虚拟模型,但这会导致为每个使用该库的项目创建一个未

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


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

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

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

选项2(我选择的):在我的
tests
模块中声明测试模型。按照建议并触发test
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')