Насмешка классов, которые не являются интерфейсами

Вот один из способов сделать это для нескольких вертикальных легенд. Я выбрал очень простые данные, чтобы обеспечить рабочее решение. Вы можете расширить концепцию до фактических данных

from matplotlib import lines

fig, ax = plt.subplots()

plt.plot([0, 5], [1, 1], label='y=1')
plt.plot([0, 5], [2, 2], label='y=2')
plt.plot([0, 5], [3, 3], label='y=3')

handles, _  = ax.get_legend_handles_labels()

vertical_pos = [5, 7, 10]
colors = ['r', 'g', 'b']

for x, c in zip(vertical_pos, colors):
    plt.plot([x, x], [0, 3], color=c, label='Vertical x=%s' %x)

_, labels = ax.get_legend_handles_labels()

for c in colors:
    vertical_line = lines.Line2D([], [],  marker='|', linestyle='None', color=c,
                          markersize=10, markeredgewidth=1.5)
    handles.append(vertical_line)

plt.legend(handles, labels)

РЕДАКТИРОВАТЬ (используя axvline вместо plot)

for x, c in zip(vertical_pos, colors):
    ax_ = plt.axvline( x=x, linestyle='-', color=c, label='Vertical x=%s' %x)

_, labels = ax.get_legend_handles_labels()

for c in colors:
    vertical_line = lines.Line2D([], [],  marker='|', linestyle='None', color=c,
                          markersize=10, markeredgewidth=1.5)
    handles.append(vertical_line)

plt.legend(handles, labels)

[115 ] enter image description here

7
задан pnuts 12 November 2015 в 00:47
поделиться

3 ответа

Насмешка платформ должна смочь создать для Вас фиктивный объект на основе класса, пока она имеет виртуальных участников.

Можно также хотеть смотреть на Typemock

6
ответ дан 6 December 2019 в 19:44
поделиться

Я знаю, что насмешки Носорога могут дразнить классы также, большинство других платформ насмешки не должно иметь никаких проблем с этим также.
Вещи также имеют в виду: класс не может быть изолирован. Необходимо отметить методы, которые Вы хотите дразнить виртуальный, и классу нужен конструктор без аргументов, это может быть защищено, частное, не будет работать. (просто испытанный это)

Следует иметь в виду, что платформа насмешки просто создаст класс, который наследовался Вашему классу и создает объект того типа. Таким образом, конструкторов вызовут. Это может вызвать неожиданное поведение в Ваших тестах.

6
ответ дан 6 December 2019 в 19:44
поделиться

RhinoMocks или Moq создадут тест, удваивается для классов, а также для интерфейсов. Тип должен иметь виртуальные методы или быть абстрактным все же. Изолятор Typemock обходит это.

Я предложил бы, чтобы объекты, которые Вы хотите дразнить, вероятно, были абстрактны (принцип инверсии зависимости).

1
ответ дан 6 December 2019 в 19:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: