当前位置: 首页 > 面试题库 >

如何在Tkinter应用上运行unittest?

凌俊语
2023-03-14
问题内容

我刚刚开始学习TDD,并且正在使用Tkinter
GUI开发程序。唯一的问题是,一旦.mainloop()调用该方法,测试套件就会挂起,直到关闭窗口。

这是我的代码的示例:

# server.py
import Tkinter as tk

class Server(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.mainloop()



# test.py
import unittest
import server

class ServerTestCase(unittest.TestCase):
    def testClassSetup(self):
       server.Server()
       # and of course I can't call any server.whatever functions here

if __name__ == '__main__':
    unittest.main()

测试Tkinter应用程序的合适方法是什么?还是只是“不”?


问题答案:

您可以做的一件事是在单独的线程中生成mainloop并使用您的主线程运行实际的测试;照看mainloop线程。进行断言之前,请确保检查Tk窗口的状态。

多线程处理任何代码都很难。您可能希望将Tk程序分解为可测试的部分,而不是一次对整个组件进行单元测试(这实际上不是单元测试)。

我最后建议至少在控制级别进行测试,如果程序没有降低测试的范围,则将为您带来极大的帮助。



 类似资料:
  • 问题内容: 我在停止“供稿”时遇到问题;cancel参数似乎对after方法没有任何影响。尽管“进纸停止”已打印到控制台。 我尝试使用一个按钮将启动供稿,而另一个按钮将停止供稿。 随着输出: 问题答案: 问题是,即使你打电话与停止循环,已经有等待消防挂起的工作。按下停止按钮不会触发新的作业,但是旧的作业仍然存在,并且当它自己调用时,它将传入False,这将导致循环继续。 您需要取消待处理的作业,以

  • 正在尝试使用“main”函数变量更新线程上运行的tkinter“textvariable”。我实现了一个基于线程的解决方案,因此tkinter mainloop后面的代码可以运行:https://stackoverflow.com/a/1835036/15409926. 请分享我如何解决此错误。如果这不是更新“textvariable”的最简单方法,请分享其他方法。 代码: 窗口不更新:Tkint

  • 我用JDK 13制作了一个java应用程序。我用launch4j创建了一个exe文件。但是没有人可以运行它,因为每个人都有jre 1.8版本,而且它不会启动。。。我必须在安装中包含java jdk 13,并用它设置java_home?

  • 我想在PC和手机上使用不同的应用程序,那么在加载应用程序之前,最好的方法是什么?

  • 问题内容: 我试图确保脚本仍在开发服务器上运行。它整理统计数据并提供Web服务,因此应该可以持续使用,但是一天几次,它会由于未知原因而死掉。当我们注意到我们只是再次启动它时,但是后部很痛苦,有些用户没有权限(或专有技术)来启动它。 我内的程序员想花几个小时来解决问题的根源,但内心的忙碌的人认为必须有一种简便的方法来检测应用程序是否未运行,然后重新启动它。 我知道我 可以 通过grep cron-s

  • 问题内容: 我无法在端口80上启动应用程序。 我已经在本地计算机(使用我的IDE和本地服务器)上尝试过,没有运气。 我检查了其他类似的帖子,并确保我在具有root用户的服务器上运行jar。 这是错误: 问题答案: 在Linux上,只能由root用户打开低于1024的端口,因此默认情况下限制端口80 如果要在80端口上发布应用,则需要将请求从80端口重定向到要运行springapp(例如8080)端