如何对python版本切换进行单元测试

Elb*_*und 3 python unit-testing pytest python-2.7 python-3.x

如何为以下函数编写单元测试:

def version_switch():
    if sys.version_info.major < 3:
        print('not python 3')
    else:
        print('python 3')
Run Code Online (Sandbox Code Playgroud)

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

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

mgi*_*son 6

您可能无法换出majoron的值sys.version_info,但您可以换出version_infoon的值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
Run Code Online (Sandbox Code Playgroud)

请注意,我使用的是 python2.7,但我确信sys我使用的是 python3.x。