为应用程序消费者提供第三方、可重用的django应用程序测试的目的是什么?

为应用程序消费者提供第三方、可重用的django应用程序测试的目的是什么?,django,testing,Django,Testing,我使用Django已经不到一年了,我想澄清一下测试在可重用Django应用程序中的作用。例如,像django allauth这样的流行应用程序都带有测试。从应用程序消费者的角度来看,这些测试的目的是什么?我跑的时候能看见- python manage.py test 只执行我的测试,而不执行应用程序测试 此外,当我运行测试时- python manage.py test allauth.account 几乎一切都失败了。例如,第一个测试失败,因为allauth试图创建一个带有关键字“user

我使用Django已经不到一年了,我想澄清一下测试在可重用Django应用程序中的作用。例如,像django allauth这样的流行应用程序都带有测试。从应用程序消费者的角度来看,这些测试的目的是什么?我跑的时候能看见-

python manage.py test
只执行我的测试,而不执行应用程序测试

此外,当我运行测试时-

python manage.py test allauth.account
几乎一切都失败了。例如,第一个测试失败,因为allauth试图创建一个带有关键字“username”的用户对象,这不是我的项目用户模型的配置方式(我只有一个电子邮件字段)。那么所有auth提供的这些测试应该在哪个项目中运行?我认为应用程序设计者应该创建适合任何适当的应用程序消费者项目配置的测试。通过这种方式,运行测试将通知您是否从已使用的应用程序的角度正确集成了项目

我注意到一个类似的问题,但这对我更一般的问题没有帮助-

顺便说一句,我已经检查了我的项目配置是否使用了all auth应用程序,它确实有正确的配置。根据-,对于具有唯一电子邮件且没有用户名的用户模型,我有-

ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
**

经过深思熟虑,我想应用程序设计者不可能编写这样的测试。例如,用户模型必须具有必需的\u字段属性。应用程序设计器无法知道如何基于此属性填充项目用户模型


那么,我认为应用程序测试只针对应用程序设计师,对吗?我这样问是因为我正在尝试编写我的第一个可重用应用程序。

这是一个持续集成逻辑:应用程序测试包含在包中,以验证包是否按预期运行。作为最终用户,您不必运行这些,因为当包被构建/推送到pypi时,它已经完成了,通常是由Travis完成的

在repo的自述文件中,通常有一个覆盖率图标,上面有测试覆盖的代码百分比。如果可用,您还可以在Python3.x和Django 2.x 3.x上进行构建。这通常使用tox来完成,tox允许在多个设置上运行测试,而./manage.py测试将仅在当前设置上验证

我不会太担心测试没有在您的特定用例上运行,因为应用程序测试是在“干净”的Django安装上验证包的,所以测试没有与电子邮件用户一起运行是正常的。没有理由让它在应用程序级别对这样的用户起作用,除非通过电子邮件定义用户而无需登录是软件包的一项功能

当你说“我认为应用程序设计者应该创建适合任何适当应用程序的测试”时,你所说的基本上是不可能的,因为像用户这样的东西可以用1000种方式定义。此外,它将不再是单元测试。这将是集成测试,这不是应用程序开发人员的责任。他们不集成应用程序,这是用户在做的,应该根据其用例进行自己的集成测试


如果你想了解更多,我建议你用谷歌搜索单元测试、集成测试和端到端测试。

看看allauth,它使用一个自定义函数从django.contrib.auth import get_user_model获取用户模型和经典的
,所以它应该适用于大多数用户模型。是的,我明白你所说的,考虑到所有应用程序配置,应用程序是不可能的。我在提交的问题更新中意识到了这一点。你知道有什么好的教程是通过发布一个包含tox文件和travis的应用程序来讨论的吗?pypi上有很多不错的资源。你也可以看看这篇文章:即使是面向大西洋的,我发现他们在CI/CD上的文章做得非常好: