我该如何对GUI进行单元测试?

162

我的代码中的计算经过了充分测试,但由于有大量GUI代码,我的整体代码覆盖率比我想要的低。是否有关于单元测试GUI代码的指导方针?这甚至有意义吗?

例如,在我的应用程序中有图表。我无法找到如何自动化测试图表的方法。据我所知,需要人眼来检查图表是否正确。

(我正在使用Java Swing)


1
有一篇由Martin Fowler撰写的关于不同GUI架构的优秀文章(http://www.martinfowler.com/eaaDev/uiArchs.html)。它描述了在单元测试方面进行GUI架构权衡。 - Roman Hwang
1
现在,这个问题最好在http://programmers.stackexchange.com上提问(并且可能因为太宽泛而不适合在Stack Overflow上讨论),但是旧问题无法迁移。除了问题是否适合在此处讨论之外,该问题仍然是一个有趣且困难的问题。 - Mark Amery
1
带有一些GUI代码和JUnit的示例将非常好。 - Witold Kaczurba
2
我会说只是放松,不要烦恼。投入单元测试的努力并不总是产生净生产力。 - codeulike
旧问题仍然存在,您可以使用Jubula在GUI中测试流程。 - Abi
14个回答

2

Window Licker 是针对 Swing 和 Ajax 的自动化测试框架。


1
据我所知,这相当复杂,而且真正取决于编程语言 - 许多编程语言都有自己测试GUI的方式,但如果你确实需要测试GUI(而不是模型/GUI交互),您通常需要模拟实际用户点击按钮。例如,Eclipse中使用的SWT框架提供了SWTBotJFCUnit已经被提到过了,Mozilla有他们自己的方法在XUL中模拟这个过程(从他们博客上看,这些测试似乎相当脆弱)。
有时您必须截屏,并测试像素完美的渲染(我相信Mozilla这样做是为了检查正确呈现的页面)- 这需要更长时间的设置,但可能是您需要的用于图表的方法。这样,当您更新代码并且测试失败时,您必须手动检查图像,以确定故障是否是真实的,或者您改进了图形渲染代码以生成更漂亮的图形并需要更新截图。

0

测试 GUI 库不是你的工作。因此,你可以规避检查屏幕上实际绘制内容的责任,而是检查小部件的属性,相信库能够准确地表示所绘制的内容。


0
如果您正在使用Swing,那么FEST-Swing对于驱动GUI和测试断言非常有用。它使得像“如果我点击按钮A,则应该显示对话框B”或“如果我从下拉列表中选择选项2,则所有复选框都应变为未选中状态”这样的测试变得非常简单明了。
您提到的图形场景并不容易测试。通过创建并显示GUI组件(并可能使用FEST进行驱动),很容易获得代码覆盖率。然而,做出有意义的断言是困难的(没有有意义的断言的代码覆盖率只是自欺欺人的行为)。 如何测试绘制的图形没有倒置或太小?
我认为您只需要接受GUI的某些方面无法通过自动化单元测试有效地测试,并且您将不得不以其他方式进行测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接