Тестирование обработки событий и выбора с помощью matplotlib - PullRequest
0 голосов
/ 02 ноября 2018

В зависимости от темы, как написать тесты для функций, которые имеют дело с , выбрать обработку событий в matplotlib?

В частности, учитывая следующий минимальный рабочий пример, как написать тест, который обеспечит 100% охват?

import numpy as np
import matplotlib.pyplot as plt

def onpick(event):
    ind = event.ind
    print('you clicked on point(s):', ind)

def attach_handler_to_figure(figure):
    figure.canvas.mpl_connect('pick_event', onpick)

def main():
    plt.ion()
    x, y, c, s = np.random.rand(4, 100)
    fig, ax = plt.subplots()
    ax.scatter(x, y, 100*s, c, picker=True)
    attach_handler_to_figure(fig)

main()

Критическая часть для меня - написание тестов для функций onpick и attach_handler_to_figure. Что касается сюжета, я нахожу этот ответ удовлетворительным!

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: У меня нет способа проверить вывод консоли. Мне нужны тестовые функции, вроде test_onpick и test_attach_handler_to_figure и test_main (ну, в общем, задача состоит в тестировании строки attach_handler_to_figure(fig)), которые могут использоваться pytest или любой другой механизм тестирования.

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете, конечно, макет события выбора. В следующем я изменил onpick, чтобы фактически вернуть что-то. Чтобы проверить вывод консоли, см. Python: вместо этого напишите unittest для печати консоли .

import numpy as np
import matplotlib.pyplot as plt

def onpick(event):
    ind = event.ind
    print('you clicked on point(s):', ind)
    return ind

def attach_handler_to_figure(figure):
    figure.canvas.mpl_connect('pick_event', onpick)

def main():
    #plt.ion()
    x, y, c, s = np.random.rand(4, 100)
    fig, ax = plt.subplots()
    ax.scatter(x, y, 100*s, c, picker=True)
    attach_handler_to_figure(fig)


def test_onpick():
    from unittest.mock import Mock

    main()

    event = Mock()
    event.ind = [2]

    ret = onpick(event)
    print(ret)
    assert ret == [2]

test_onpick()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...