我想包含我的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最佳实践。
答案 0 :(得分:0)
这取决于您希望的确定程度,您可以信任您的单元测试。
如果你不相信django的内部功能,你就不应该使用django,而是在你的整个项目中使用纯python。 如果你不相信python的内部函数你不应该使用python,但是C. 如果你不信任C,你应该使用汇编程序。 ...
django本身包含单元测试,可确保每个版本按预期工作。因此,您可以确保ORM按预期工作。