Java Swing界面自动化测试初探(上)
最近有机会又学习了一下Java自动化测试框架,对于自动化测试有了进一步的了解。自动化测试的效果,业界一直都存在一些争论,不过我理解现在的基本共识是自动化测试(即利用程序实现测试工作)是有用的,至于对不同类型的软件能起到多大的作用就要依情况而定。有的软件项目自动化测试可能可以覆盖大部分场景,有的可能只能覆盖较少部分。前一段时间看Robert C. Martin大叔的《程序员的职业素养》,其中对于测试的重视程度令人印象颇深。Martin大叔花了三章的篇幅来讲述测试,分别是测试驱动开发、验收测试和测试策略。而在测试驱动开发一章中,他谈到自己和Kent Beck的一次会面,看完Kent的展示之后,他说:“这让我目瞪口呆!”。Martin大叔的结论是:“此事已有定论!TDD确实可行。”
当然是否是TDD是开发模式的选择,不一定要强求,但是对于自动化测试的重要性,大家应该是广泛认同的。在Jeff Atwood最新出版的博客文集(中文版译名《高效能程序员的修炼》)中,Jeff引用了J.Timothy King的一篇文章,题为《我同情那些不写单元测试的傻瓜》,并由此而展开了对于测试重要性和方法的探讨,并警示大家,不要因为不喜欢测试驱动就不写测试了,这是非常错误的。自动化测试活动在保障产品质量、提高开发效率和持续交付能起到十分关键的作用。
具体到我们实际的开发工作,Java自动化测试起源较早,敏捷声明的发起人之一、XP方法的倡导者Kent和Erich(《设计模式》作者之一)合作创建了JUnit单元测试框架,在Java世界里享有盛誉并成为事实上的标准。不过,现在还有一个更加流行的选择,TestNG。TestNG不仅在单元测试方面,而且在组件测试方面,甚至在功能和系统测试上都有很大的帮助。当然,本文主要不是讨论测试框架,我们主要讨论Java世界里的界面测试问题。有关自动化测试框架的话题,可参考相关网站。