2017-02-10 20 views
0

Рассмотрим следующий сценарий демо:unicode_literals и doctest в Python 2.7 и Python 3.5

# -*- coding: utf-8 -*- 
from __future__ import division 
from __future__ import unicode_literals 

def myDivi(): 
    """ 
    This is a small demo that just returns the output of a divison. 
    >>> myDivi() 
    0.5 
    """ 
    return 1/2 

def myUnic(): 
    """ 
    This is a small demo that just returns a string. 
    >>> myUnic() 
    'abc' 
    """ 
    return 'abc' 

if __name__ == "__main__": 
    import doctest 
    extraglobs = {} 
    doctest.testmod(extraglobs=extraglobs) 

doctest переходит на Python 3.5, но не работает на Python 2.7.9.
Странная вещь, тест деления работает, но тест unicode терпит неудачу.

Я видел различные вопросы, в том числе следующие

, но все они несколько разные (например, они устарели (ссылаясь на Py 2.6 или Py 3.0), оператор импорта находится внутри доктрины, а не во всем мире, используйте pytest вместо стандартного доктрины, переключитесь на разные утверждения и т. д.)
Тем не менее, я пробовал различные альтернативы на основе этих вопросов, в том числе например

if __name__ == "__main__": 
    import doctest 
    import __future__ 
    extraglobs = {'unicode_literals': __future__.unicode_literals} 
    doctest.testmod(extraglobs=extraglobs) 

или

def myUnic(): 
    """ 
    This is a small demo that just returns a string. 
    >>> myUnic() 
    u'abc' # doctest: +ALLOW_UNICODE 
    """ 
    return 'abc' 

, но она по-прежнему не работает, либо на Python 2 или 3 или дает другие ошибки.
Есть ли способ заставить его пройти как 3.5+, так и 2.7.9+, без уродливых хаков? Я также использую эти docstrings для генерации документации, поэтому я бы предпочел сохранить их более или менее такими, какими они есть.

+0

связанный: https://bugs.python.org/issue3955 – matth

ответ

-1

По соглашению с Martijn Pieters комментирует в Multi version support for Python doctests, я предлагаю полагаться на тестирование с использованием некоторого реального единичного тестового фреймворка.

Вы все равно можете использовать строки doctest, потому что они могут быть хороши для документации. Подумайте о будущем и напишите их для Python 3. В то же время напишите единичные тесты для другой платформы модульного тестирования. Не полагайтесь на doctest для версии вашего приложения/модуля Python 2.