【发布时间】:2012-06-11 08:08:53
【问题描述】:
我正在使用 PyGObject(新的基于自省的 Gtk 绑定)编写一个中小型 GUI 应用程序。我从一个基于nose 的合理测试套件开始,它能够通过简单地导入模块并调用各种函数并检查结果来测试我的应用程序的大部分功能。
不过,最近我开始利用一些 Gtk 功能,例如 GLib.timeout_add_seconds,这是一种相当简单的回调机制,在计时器到期后简单地调用指定的回调。我现在自然面临的问题是,当我使用该应用程序时,我的代码似乎可以工作,但是测试套件的封装很差,所以当一个测试检查它是否以干净状态开始时,它发现它是状态已被另一个测试注册的回调完全践踏。具体来说,测试成功检查没有加载文件,然后加载一些文件,然后检查文件加载后没有被修改,测试失败!
我花了一段时间才弄清楚发生了什么,但基本上一个测试会修改一些文件(它会启动一个计时器)然后关闭它们而不保存,然后另一个测试会重新打开未修改的文件并发现它们是已修改,因为回调在计时器启动后更改了文件。
我已经阅读了 Python 的 reload() 用于重新加载模块的内置函数,希望我可以让它卸载并重新加载我的应用程序以重新开始,但它似乎不起作用。
恐怕我可能不得不求助于将应用程序作为子进程启动,对其进行修补,然后在需要保证新状态时结束子进程并重新启动它。是否有任何测试框架可以让这变得简单,尤其是对于 pygobject 代码?
【问题讨论】:
-
这到底是怎么回事 - 子流程似乎不是最糟糕的方式?
标签: python testing gtk glib pygobject