Nose / Unittest不同的测试依赖于Python版本

时间:2015-08-16 20:35:53

标签: python unit-testing

我正在编写a nose test,以便为我写的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)测试失败。

如何根据正在测试的Python版本编写一个检查TypeErrorassert_produces_warning(DeprecationWarning)的测试?

1 个答案:

答案 0 :(得分:0)

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

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

if sys.version_info < (2, 7):

更令人愉快的是:

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

在其文档字符串中有令人愉快的评论:

  

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

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