如何对python版本开关进行单元测试

时间:2016-06-24 22:23:51

标签: python python-2.7 unit-testing python-3.x pytest

如何为以下功能编写单元测试:

def version_switch():
    if sys.version_info.major < 3:
        print('not python 3')
    else:
        print('python 3')

我的第一个想法是嘲笑sys.version_info.major,但因为它是一个只读属性,所以不会这样做。

确定:我使用tox在py3和py2下运行我的测试套件。但是,每次运行只会检查一个代码路径。实际功能不使用任何语言特定功能。我应该寻找其他方法来确定版本,更容易模拟吗?

2 个答案:

答案 0 :(得分:4)

您可能无法在major上换出sys.version_info的值,但您可以在version_info上换出sys的值:

Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import mock
>>> with mock.patch.object(sys, 'version_info') as v_info:
...   v_info.major = 3
...   print(sys.version_info.major)
... 
3

请注意,我使用的是python2.7,但我说服sys告诉我我正在使用python3.x。

答案 1 :(得分:1)

  

但是,每次运行只会检查一个代码路径

因此?

如果您在Python 2上运行Python 3代码路径,那么您不会关心,反之亦然。没有必要对此进行测试。只需检查输出是否与您正在运行的Python版本正确对应。