如何测试Django自定义模型字段?

12
我正在考虑创建一些继承 Django 模型字段,并将它们作为一个软件包分发在PyPI上。我喜欢为我的代码编写单元测试(使用TDD),但是我有点困惑如何为这个特定的库编写测试。
我想到的第一个想法是创建一个使用我的子类的Django项目,然后使用Django测试工具,但这看起来并不太优雅。肯定有更好的方法!
是否有一种方法可以为这种类型的事情初始化 Django? 我希望有人能指引我正确的方向。谢谢!

1
为什么一定要有“更好的方式”呢?在我看来,如果你正在为Django编写一个库,使用Django的测试接口是非常合理的。 - Chris Pratt
@ChrisPratt 这需要编写大量与“测试库”无关的代码。 Django项目通常需要单元测试,因此如果我采用这种方法,我可能最终会为我的单元测试编写单元测试。这并不理想! - arussell84
1
不,你不需要这样做。你不必测试任何不在你的应用程序中的东西。Django已经为其所有内容编写了自己的测试。只需测试你的应用程序中独特的部分,并依赖于Django的功能来“自动处理”。这不是你的责任去保证它。 - Chris Pratt
@ChrisPratt 不,我不是在测试Django代码库本身... Django测试接口存在的原因是为了测试Django应用程序。我不想测试Django应用程序。我想测试一个Django模型字段子类。 - arussell84
1
你将在Django应用程序中创建... 哎呀,这都是语义问题了,但是Django的测试基础设施并没有什么特别之处。它只是unittest2加上一些附加组件,使得测试Django的东西更容易。如果你正在为Django编写某些内容,你可以假设Django可用,并因此使用这些附加组件。当然,你也可以直接导入unittest2,但无论哪种方式,测试都是相同的。 - Chris Pratt
1
@ChrisPratt 或许我们在争论语义,但你不能假设我了解足够的 Django 内部知识来知道这一点(我不知道!)。基本上,我不想为了测试套件而包含 manage.py、urls.py、settings.py。这似乎并不必要。我的问题是是否可能。我不在乎你是否称其为 Django 应用程序。我也不知道为什么你会给我这么大的压力,因为 lazerscience 已经在 3 小时前给了我一个更有帮助的答案。 - arussell84
1个回答

12

Django本身带有一些用于字段子类化的测试; 这些测试具有自己的models.py,其中使用了自定义字段。当您查看实际代码时,您应该会有最好的印象!

补充说明:为了使在您的test包中定义的模型被Django发现,您需要将yourapp.test包添加到INSTALLED_APPS中。Django本身就有内置机制来自动发现和添加其自己的测试到INSTALLED_APPS


非常确定这就是我要找的。我会尝试一下,确认后会接受您的答案。谢谢! - arussell84
抱歉回复晚了。我目前对Django失去了兴趣,但我想至少试一下。结果发现我无法实现我想要的功能。为了创建一个子类字段,我需要整个Django项目。否则,该字段没有设置知道保存到哪里等等!无论如何,这是我得到的最接近答案,所以我将其标记为这样。 - arussell84
4
请注意,"actual code" 引用的链接已经更改;看起来现在可以在 https://github.com/django/django/blob/master/tests/field_subclassing/tests.py 找到。 - rmehlinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接