8

由于某些功能在新版本的 Django 中被弃用,有没有办法在 github 上的现有项目代码上检查这些功能。

一个工具可以做到这一点。有没有办法通过测试用例来检测它。

是否有可能对 python 版本做同样的事情。

我想一种方法可能是使用 tox 运行特定版本的 django/python,然后检查错误。

我只是在寻找更优雅或更直接的东西,比如“注意这个功能已被弃用”,这可以用像 Java 这样的强类型语言来完成。

如果有人想构建这样一个工具,如果可能的话,可以从什么开始。

4

2 回答 2

2

我认为这必须在您的项目的单元测试中。

如果您的测试练习将在未来版本的 Django 中弃用的代码,您将收到警告。如果你已经跳转到该功能已经被弃用的 Django 版本,你当然会得到异常和失败的测试。

您可以告诉 Python 解释器向异常发出警告,这会导致测试失败。

此处的说明将相同的技巧应用于流行的鼻子测试测试框架。

如果您已经(来自 Django 文档)知道您正在编写的某些代码将需要根据运行的 Django 版本进行更改(例如,您正在分发可重用的 Django 应用程序)我建议使用一种功能检测形式try ... except

例如,这里我想有条件地使用 Django >= 1.6: 中的transaction.atomic功能

如您所料,然后我在 Tox的帮助下针对不同版本的 Django 运行测试。

于 2014-04-22T12:32:25.350 回答
2

这就是我如何让 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,因为这不仅会使单个测试失败,而且会使我的测试套件无法执行任何测试,因为该套件使用了已弃用的功能。

于 2015-04-30T18:11:29.417 回答