Nose/Unittest根据Python版本测试不同的测试



我正在为我正在编写的pandas添加的API编写鼻子测试。他们使用Travis CI来运行他们的测试套件。

在我使用的Python版本(Python 2.7.6, numpy 1.9.2)中,以下会引发一个TypeError:

>>> numpy.round([1.23, 1.132], 2.5)
TypeError: integer argument expected, got float

但是在Travis CI测试的版本(Python 2.6.9, numpy 1.9.2)中,相同的命令会引发警告:

>>> numpy.round([1.23, 1.132], 2.5)
/home/some_user/anaconda/envs/py26/lib/python2.6/site-packages/numpy/core/fromnumeric.py:45: DeprecationWarning: integer argument expected, got float
  result = getattr(asarray(obj), method)(*args, **kwds)
array([ 1.23,  1.13])

这意味着我的assertRaises(TypeError)测试失败。

我怎么能写一个测试,这将检查TypeError或做assert_produces_warning(DeprecationWarning)取决于什么Python版本正在测试?

似乎有两种方法可以做到这一点,在pandas测试源中使用。

这种方法有几个(非常相似的)变体:

if sys.version_info < (2, 7):

和更令人愉快的:

from distutils.version import LooseVersion
if sys.version < LooseVersion('2.7'):

在其文档字符串中有有趣的注释:

无政府主义者和软件现实主义者的版本编号。

我不知道哪一种方式比另一种更受欢迎。

最新更新