调用TKinter GUI的Unittest

2024-04-23 16:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

假设一个脚本启动一个TKinter GUI(例如,scripts/launch_GUI.py),并且是PyPI包的一部分(例如MyPackage)。在

.
├── appveyor.yml
├── MyPackage
│   ├── TkOps.py
│   └── CoreFunctions.py
├── README.md
├── requirements.txt
├── scripts
│   ├── launch_CLI.py
│   └── launch_GUI.py
├── setup.py
└── tests
    └── MyPackage_test.py

启动脚本非常简单:

^{pr2}$

在启动launch_GUI.py时,如果TKinter GUI正确启动,您会推荐什么unittest?在

注意:我只想评估启动脚本是否执行其工作并启动GUI,而不是用户是否可以与GUI交互。在


Tags: py脚本pypitkinterymlscriptsguilaunch
1条回答
网友
1楼 · 发布于 2024-04-23 16:24:42

可以说你需要一个功能性的测试,而不是一个单元测试,但是我们还是试试这个吧!在

虽然可以通过exec()按原样测试启动脚本,但这被认为是不好的做法。让我们重构它:

def main():
    import sys, os
    sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'MyPackage'))
    import TkOps
    TkOps.start_GUI()

if __name__ == '__main__':
    main()

然后让我们确定单元测试应该测试什么,例如:

  • sys.path更新为MyPackage的正确路径
  • start_GUI被调用

然后mokist[1]单元测试可以是这样的:

^{pr2}$

一个经典的单元测试需要GUI中的一个转义舱口,例如:

def start_GUI(dry_run=False):
    import tk
    ...
    if not dry_run: tk.foobar()

[1]https://agilewarrior.wordpress.com/2015/04/18/classical-vs-mockist-testing/

相关问题 更多 >