Как проверить обратный вызов метки Tkinter - следите - PullRequest
0 голосов
/ 30 сентября 2018

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

Возможно, я что-то упускаю, или есть лучший подход к выполнению модульного тестирования с помощью

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