Как протестировать графику matplotlib с помощью tox и py.test?

Как протестировать графику matplotlib с помощью tox и py.test?

Мои файлы:

testtox /
  - testtox.py
  - tox.ini
  - setup.py

testtox.py содержит:

import matplotlib.pyplot as plt


def plotting():
    """Plot.

    Examples
    --------
    >>> plt.ion()
    >>> plotting()

    """
    plt.plot([1, 2, 1, 3])

tox.ini:

[tox]
envlist = py27

[testenv:py27]
sitepackages = True
commands = py.test --doctest-modules testtox.py
deps = pytest

setup.py:

from setuptools import setup

setup(name='testtox', py_modules=['testtox'])

py.test сам по себе работает нормально:

$ py.test --doctest-modules testtox.py

В этом случае окно графика кратковременно мигает.

tox выдает ошибку в переменной DISPLAY:

$ tox
[...cut ...]
=================================================== FAILURES ====================================================
__________________________________________ [doctest] testtox.plotting ___________________________________________
005     """Plot.
006 
007     Examples
008     --------
009     >>> plt.ion()
010     >>> plotting()
UNEXPECTED EXCEPTION: RuntimeError(u'Invalid DISPLAY variable',)
Traceback (most recent call last):
[...]

  File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_qt5.py", line 138, in _create_qApp
    raise RuntimeError('Invalid DISPLAY variable')

RuntimeError: Invalid DISPLAY variable

Эта ошибка произошла с самой последней версией tox (2.1.1). Старая версия не выдавала ошибки.


person Finn Årup Nielsen    schedule 09.07.2015    source источник
comment
Другим вариантом было бы смоделировать фактический график и просто проверить, что ваш код делает соответствующие вызовы.   -  person jonrsharpe    schedule 09.07.2015
comment
Будет ли мокап иметь смысл с doctest?   -  person Finn Årup Nielsen    schedule 09.07.2015
comment
Специально для этого есть библиотека: pypi.python.org/pypi/MiniMock   -  person jonrsharpe    schedule 09.07.2015
comment
Но пользователь, читающий строку документации, не увидит сюжет, если над ним издеваться.   -  person Finn Årup Nielsen    schedule 09.07.2015
comment
Пользователь, читающий текст строки документации, в любом случае не увидит сюжет!   -  person jonrsharpe    schedule 09.07.2015
comment
:-) Но когда пользователь выполняет строку документации, он должен показать сюжет. По крайней мере то, что было бы наиболее естественным для меня.   -  person Finn Årup Nielsen    schedule 09.07.2015
comment
Давайте продолжим обсуждение в чате.   -  person jonrsharpe    schedule 10.07.2015


Ответы (1)


В этом случае установка переменной окружения DISPLAY в tox.ini, кажется, помогает:

[tox]
envlist = py27

[testenv:py27]
setenv = 
    DISPLAY = :0
sitepackages = True
commands = py.test --doctest-modules testtox.py
deps = pytest
person Finn Årup Nielsen    schedule 09.07.2015