跟随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
由于对mainloop的调用是阻塞调用,所以什么也没有发生。
也许我遗漏了其他东西,或者是否有更好的方法来使用...进行单元测试