После Как проверить обратный вызов метки Tkinter
У меня возникла новая проблема.
Весь фон
Я пытаюсь научитьсякак пользоваться Tkinter.Для этого я создал небольшое приложение и пытаюсь создать модульный тест, используя Pytest.
Тестируемый класс
Я удалил некоторый код, который не имеет отношения к вопросу
class Myclass:
def __init__(self, timeout):
self.tk = Tk()
self.frame = Frame(self.tk)
self.frame.bind("<Key>", self.key_press)
self.frame.focus_set()
self.tk.attributes("-fullscreen", True)
self.timeout = timeout
self.labels = deque()
def key_press(self, key):
label = Label(self.tk, text="Hello!")
label.place(relx=x, rely=y)
label.after(self.timeout, label.destroy)
class Starter:
def start(self):
w = Myclass(1)
w.tk.mainloop()
Я бы хотел проверить функцию key_press, главным образом, чтобы убедиться, что тайм-аут работает.
После предыдущего вопроса это UT:
class MockedClass(Myclass):
def __init__(self, timeout):
self.timeout = timeout
self.tk = Tk()
self.labels = deque()
def test_timeout_reached_label_destroyed():
obj = MockedClass(timeout=1)
obj.mainloop()
time.sleep(2)
assert obj.labels[0].winfo_exists() is False
ЭтоUT дает сбой / застревает
Поскольку вызов mainloop является блокирующим вызовом, ничего не происходит.
Возможно, я что-то упускаю, или есть лучший подход к выполнению модульного тестирования с помощью