由于某些功能在新版本的 Django 中被弃用,有没有办法在 github 上的现有项目代码上检查这些功能。
一个工具可以做到这一点。有没有办法通过测试用例来检测它。
是否有可能对 python 版本做同样的事情。
我想一种方法可能是使用 tox 运行特定版本的 django/python,然后检查错误。
我只是在寻找更优雅或更直接的东西,比如“注意这个功能已被弃用”,这可以用像 Java 这样的强类型语言来完成。
如果有人想构建这样一个工具,如果可能的话,可以从什么开始。
由于某些功能在新版本的 Django 中被弃用,有没有办法在 github 上的现有项目代码上检查这些功能。
一个工具可以做到这一点。有没有办法通过测试用例来检测它。
是否有可能对 python 版本做同样的事情。
我想一种方法可能是使用 tox 运行特定版本的 django/python,然后检查错误。
我只是在寻找更优雅或更直接的东西,比如“注意这个功能已被弃用”,这可以用像 Java 这样的强类型语言来完成。
如果有人想构建这样一个工具,如果可能的话,可以从什么开始。
我认为这必须在您的项目的单元测试中。
如果您的测试练习将在未来版本的 Django 中弃用的代码,您将收到警告。如果你已经跳转到该功能已经被弃用的 Django 版本,你当然会得到异常和失败的测试。
您可以告诉 Python 解释器向异常发出警告,这会导致测试失败。
如果您已经(来自 Django 文档)知道您正在编写的某些代码将需要根据运行的 Django 版本进行更改(例如,您正在分发可重用的 Django 应用程序)我建议使用一种功能检测形式try ... except
例如,这里我想有条件地使用 Django >= 1.6: 中的新transaction.atomic
功能。
如您所料,然后我在 Tox的帮助下针对不同版本的 Django 运行测试。
这就是我如何让 tox 针对 Django 1.6、1.7 和 1.8 运行我的一个项目,并带有弃用警告:
[tox]
envlist = {py27,py34}-{django16,django17,django18}
[testenv]
basepython =
py27: python2.7
py34: python3.4
deps =
django16: Django>=1.6,<1.7
django17: Django>=1.7,<1.8
django18: Django>=1.8,<1.9
commands =
python -Wmodule ./manage.py test
该-Wmodule
参数导致 Python 在模块中第一次出现弃用警告时输出它,这对我来说已经足够了。我能够处理我使用的实例from django.core.cache import get_cache
,这将在 Django 1.9 中消失。
在-Wmodule
输出过多的情况下,您可能希望更具选择性。Python 的文档给出了如何使用这个参数的内幕。我故意不使用-Werror
,因为这不仅会使单个测试失败,而且会使我的测试套件无法执行任何测试,因为该套件使用了已弃用的功能。