Редактировать:
Да, это работает.Исходная функция возвращает именованный кортеж с полями major
, minor
и micro
.Вы можете имитировать это, создав собственный кортеж с именем.Я просто использую простой кортеж, когда вы получаете доступ с индексом int
.Проблема с вашим кодом связана с тем, что вы проиндексировали [0]
, что было неправильно.
Edit2:
Как отметил Заур Насибов, sys.version_info
не является функцией, и поэтому мой кодбыл не прав, несмотря на то, что отлично смотрелся с макетами (как нашел GenError)Я сделал небольшое изменение, чтобы исправить это (см. Ответ GenError для альтернативы, использующей PropertyMock
)
import sys
from unittest.mock import patch
def my_func():
version = sys.version_info # removed the ()
print('Detected version:', version)
if version[0] < 3:
print('Error: Python 3 required.')
@patch('__main__.sys')
def test_python_version(mock_sys):
mock_sys.version_info = (3,6,2)
my_func()
print()
mock_sys.version_info = (2,7,0)
my_func()
test_python_version()
Выходы
Detected version: (3, 6, 2)
Detected version: (2, 7, 0)
Error: Python 3 required.