2014-08-31 4 views
0

Я пишу модульные тесты для виджета 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, чтобы продолжить выполнение, , не запуская никакой другой команды в оболочке интерпретатора, тест не прерывается.

Любые подсказки или обходные пути?

ответ

0

Возможно, вам понадобится опция warp, чтобы заставить мышь находиться над виджетами. Вполне возможно, что виджет имеет проверку, чтобы игнорировать события кнопки, если курсор не находится над виджетами. Возможно, вам удастся сгенерировать событие <Enter> перед кликом.

Я помню, что мне приходилось делать эти трюки, когда я писал тестовое программное обеспечение в tcl/tk, но я никогда не делал этого с Tkinter. Я даже не знаю, поддерживается ли в Tkinter опция warp. Возможно, вам придется написать свою собственную оболочку вокруг команды генерации ядра tcl/tk.

+0

thx для предложения. Вариант warp существует, но не делает трюк. Кроме того, когда я помещал set_trace, я фактически ничего не добавлял к 'label.event_generate (" ")', но событие не запускается. – andtorg

+0

Когда отладчик приостанавливает выполнение, вы перемещаете мышь вообще, чтобы взаимодействовать с отладчиком? –

+0

Это не влияет на результат. Либо я нажимаю на окно оболочки или нажимаю Alt + Tab, когда я возобновляю выполнение тестового прохода – andtorg

Смежные вопросы