如何对Django模型进行单元测试?

时间:2015-08-02 12:17:17

标签: python django unit-testing integration-testing django-testing

我想包含我的Django应用程序的测试。在阅读了几篇关于单元测试与集成测试(特别是this SO posting)的帖子之后,我不确定以下情况:

  

单元测试是唯一可以告诉您错误位置的测试。要绘制此信息,他们必须在模拟环境中运行该方法,其中所有其他依赖项应该正确工作。

在测试我的表单时(事实上ModelForm s),我依赖于Django的feature to provide test-data by a fixture。因此,我的表单测试使用普通 Django方法,如Foo.objects.get()

但是,上述链接的SO帖子建议在不依赖外部组件的情况下执行单元测试。那么我应该放弃单元测试的灯具并仅在集成测试中使用它们吗?

以下是我目前的表单测试设置示例:

from django.test import TestCase

class FooTest(TestCase):
    """Base class for all app related tests"""
    fixtures = ['testdata.json']

class BarFormTest(FooTest):
    """Tests for the BarForm"""

    def test_constructor(self):
        """Tests if the form stores the supplied user"""

        # this is the line I'm unsure of:
        u = User.objects.get(username='TestUser01')
        # is this better?
        # u = User(username='TestUser01')

        form = BarForm(data=None, user=u)

        self.assertEqual(u, form.user)

不要误会我的意思,我的测试按预期工作。我只是不确定我是否可以依赖外部(Django内置)功能。它们也经过测试,因此我的测试中的任何错误都很可能源于我的代码。

我是否应该为固定装置进行集成测试?我希望这个问题不是太宽泛,我在这里询问Django最佳实践。

1 个答案:

答案 0 :(得分:0)

这取决于您希望的确定程度,您可以信任您的单元测试。

如果你不相信django的内部功能,你就不应该使用django,而是在你的整个项目中使用纯python。 如果你不相信python的内部函数你不应该使用python,但是C. 如果你不信任C,你应该使用汇编程序。 ...

django本身包含单元测试,可确保每个版本按预期工作。因此,您可以确保ORM按预期工作。