Как обеспечить 100% покрытие ветвящихся версий Python? - PullRequest
0 голосов
/ 21 марта 2019

В некотором коде, который я портирую с Python 2 на 3, но который все еще должен работать на обоих, у меня есть что-то вроде этого:

if six.PY2:
    _text = widget.get_text().strip().decode('utf-8')
else:
    _text = widget.get_text().strip()

Поскольку GTK-3 widget.get_text() возвращает байты в Python 2и Unicode в Python 3. Это PITA, так как метод, который я передаю _text, нуждается в Unicode.Таким образом, в Python 2 я должен декодировать любые данные, которые я получаю.

У меня есть модульные тесты, которые имитируют widget.get_text, но очевидно, что они работают под одной и только одной версией Python.Я мог бы добавить pragma: no test к ветке Python 2, но это похоже на чит.

Итак, вопросы:

  • Как мне получить 100% тестовое покрытие с вышеупомянутым без прагмы. .
  • Как я могу реорганизовать этот код, чтобы у меня вообще не было ветки?

1 Ответ

2 голосов
/ 22 марта 2019

Почему бы не измерить охват в обеих версиях, а затем объединить данные и посмотреть на 100% в объединенных результатах?

Например:

$ python2 -m coverage run --parallel run_the_tests.py
$ python3 -m coverage run --parallel run_the_tests.py
$ python3 -m coverage combine
$ python3 -m coverage html
...