6

我正在使用 PyGObject(新的基于自省的 Gtk 绑定)编写一个中小型 GUI 应用程序。我从一个合理的测试套件开始nose,它能够通过简单地导入模块并调用各种函数并检查结果来测试我的应用程序的大部分功能。

然而,最近我开始利用一些 Gtk 特性,比如GLib.timeout_add_seconds一个相当简单的回调机制,在计时器到期后简单地调用指定的回调。我现在自然面临的问题是,当我使用应用程序时,我的代码似乎可以工作,但是测试套件的封装很差,所以当一个测试检查它是否以干净状态开始时,它发现它的状态已经被践踏了由不同测试注册的回调。具体来说,测试成功检查没有加载文件,然后加载一些文件,然后检查文件在加载后没有被修改,测试失败!

我花了一段时间才弄清楚发生了什么,但基本上一个测试会修改一些文件(它会启动一个计时器)然后关闭它们而不保存,然后另一个测试会重新打开未修改的文件并发现它们已被修改,因为计时器结束后,回调更改了文件。

我已经阅读了 Python 的reload()用于重新加载模块的内置函数,希望我可以让它卸载并重新加载我的应用程序以重新开始,但它似乎并没有工作。

恐怕我可能不得不求助于将应用程序作为子进程启动,对其进行修补,然后结束子进程并在需要保证新状态时重新启动它。是否有任何测试框架可以使这变得容易,特别是对于 pygobject 代码?

4

1 回答 1

2

模拟框架会帮助您隔离回调吗?这样,您应该能够恢复到与开始时相同的状态。请注意,SetUp() 和 tearDown() 模式也可能对您有所帮助——但我有点假设您已经在使用它。

于 2012-06-11T08:12:10.847 回答