如何测试Tkinter标签回调-后续

时间:2018-09-30 19:11:02

标签: python tkinter

跟随How to test Tkinter label callback

我正面临一个新问题。

整个背景

我正在尝试学习如何使用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的调用是阻塞调用,所以什么也没有发生。

也许我遗漏了其他东西,或者是否有更好的方法来使用...进行单元测试

0 个答案:

没有答案