Я пишу модульные тесты для виджета tkinter, который является частью более крупного приложения. У меня есть проблема, связанная с запуском события на ярлыках, чтобы утверждать выполнение обратного вызова.Проблема с тестом Tkinter
Обратите внимание: мой тестовый код хорошо работает при проверке обратных вызовов кнопок. В таких случаях я пишу что-то похожее на:
a_button = self.sc._inner_frame.winfo_children()[2].winfo_children()[2]
a_button.invoke()
self.assertTrue(self.controller.add_sell_indicator.called)
и он работает.
Для этикеток, однако, не является invoke()
метод, поэтому я использую event_generate()
согласно:
label = self.sc._inner_frame.winfo_children()[0].winfo_children()[0]
label.event_generate("<Button-1>")
self.assertTrue(self.controller.get_selected_indicator.called)
но тест не пройден, потому что событие <Button-1>
не срабатывает.
Я немного поиграл в ipdb.set_trace()
до и после label.event_generate
. Я заметил, что только когда я положил его перед вызовом, а затем нажмите c
, чтобы продолжить выполнение, , не запуская никакой другой команды в оболочке интерпретатора, тест не прерывается.
Любые подсказки или обходные пути?
thx для предложения. Вариант warp существует, но не делает трюк. Кроме того, когда я помещал set_trace, я фактически ничего не добавлял к 'label.event_generate (" ")', но событие не запускается. –
andtorg
Когда отладчик приостанавливает выполнение, вы перемещаете мышь вообще, чтобы взаимодействовать с отладчиком? –
Это не влияет на результат. Либо я нажимаю на окно оболочки или нажимаю Alt + Tab, когда я возобновляю выполнение тестового прохода – andtorg