怎样选择Java测试框架
自动化测试已经成为你的Java项目的一部分了吗?你最喜欢的测试框架是什么?用的是什么样的标准?
本文的四位开发人员将与您分享他们在自动化测试领域的观点和经验。当你的项目面临测试阶段的时候,希望这些意见能对你有所帮助。如果你也想分享你的观点,请回复并参与讨论。真心希望能为这方面的新手提供一些有益的建议和标准。
文章的作者和提到的测试框架列在文章的末尾。
关于自动测试-Tom Wheeler
当我给那些有经验的开发人员上课时,我发现只有大约40%的人编写测试。大约40%的人甚至没有听说过JUnit,他们中的大多数人根本没有单元测试的概念。开发人员通常承受着项目经理制定的紧张计划的压力——而那些项目经理也承受着客户的压力,客户希望他们的软件被快速开发出来。不幸的是,测试是项目的重要组成部分,许多人很容易就把它砍掉了。真的是目光短浅。那种做法只会让你的应用成为bug的天堂,会大大超出你的计划时间。
为什么会这样?因为写自动化测试实际上节省了很多运行时间。每个开发人员都会犯错误,测试可以帮助找到他们。手动测试在某些方面可能比自动测试更快,但是手动测试需要用户界面。手动测试的结果是不一致的,因为测试人员和开发人员也会犯错误。并且自动测试将总是保持结果的一致性。
也许更重要的是,当一个老的bug被修复或者新的特性被添加时,更多的bug会被引入。更换系统后,您需要重新运行所有测试。这也是自动化测试价值的体现,因为与人工测试的成本相比,自动化测试的成本可以忽略不计。如果开发人员经常测试,可以更容易的发现和修改问题,可以保证代码的质量和团队开发的进度。
对比JUnit和TestNG-Meera Subbraro
Martin Fowler曾经说过,在软件开发领域,以前从来没有过这样的事情:很少几行代码在大量代码中起到如此重要的作用。JUnit曾经是单元测试的标准,直到现在。它是最流行的开源工具。当然,现在我们有许多不同于JUnit的其他开源工具。我自己,除了用JUnit,还是用TestNG。先说这两个框架。
JUnit和TestNG都使用注释,这使得测试变得简单而有趣。如果您编写两个测试类,一个使用JUnit,另一个使用TestNG,您很难看出它们之间的区别,除非您看到它们的导入语句。
如果您是TDD的信徒,通过运行测试来完成您的持续集成过程。TestNG可能更合适。重新运行失败测试的机制对每天编译很有帮助。此功能仅适用于TestNG。
TestNG的另一个亮点是支持参数化。在JUnit中,如果你想测试不同的参数,你需要编写不同的测试用例来覆盖不同的参数。在TestNG中,这是通过使用xml配置文件来完成的。开发人员可能会抱怨xml文件,“太好了,除了那些测试用例,我还得维护一堆XML文件”。(译者按:JUnit4也支持参数测试)
JUnit生成的HTML格式的报告很不错。我用TestNG和Java 6,生成的报表远没有JUnit漂亮。
最后,两种框架各有优缺点,必要时我们可以同时使用。让我们使用这两个伟大的框架,并享受编写测试的乐趣。
你为什么从JUnit转到TestNG-Andres Almiray
当我开始写测试程序的时候,我选择了JUnit3.x,因为那时候它是一个开源的选择,有相当详细的文档和成堆的书籍供我参考。在此基础上还有dbUnit、xmlUnit等很多扩展来帮助测试一些大型组件。但是如果我们需要面对更复杂的测试,通常是集成/功能测试,显然JUnit将无法做到。这也是我转做TestNG的原因。Cedric和Alexandru TestNG的作者从一开始就明确表示,TestNG是为更广泛的测试场合而设计的,而不仅仅是单元测试。TestNG可以运行未修改的JUnit测试,这使得它们之间的转换非常平滑。
后来发布的JUnit4.x在细节上与TestNG非常相似,这也弥补了两个框架之间的裂痕。TestNG还是我的最爱,而且还在更新。开源的Java测试框架里还是有新人的,easyb,一个基于Groovy行为驱动开发的测试工具,测试Java和Groovy。通过编写合理的测试或承担一项任务,即使它是可执行代码,也可以被视为一个规范。如果在Ruby world中使用Rspec,也是一样的。
为什么JUnit仍然是首选——Aslam Khan
和很多开始测试驱动开发和单元测试的人一样,我从JUnit3.x开始我发现JUnit是最广泛的工具,出现在各个地方(ANT、Maven、Eclipse、IntelliJ IDEA等。).也很容易介绍给那些新团队。我也使用TestNG,同样对它的多样性印象深刻。但是,大量的Junit插件(dbUnit,xmlUnit等。)让JUnit依然是首选。如果你在Spring上花了很多时间,基于Junit的Srping ApplicationContext aware的测试用例会带来优势。为了测试前景,我几乎只用硒。我曾经涉猎过Canoo等框架,但是发现这些做法都是反TDD模式的。使用Selenium,我可以处理Selenium测试脚本和记录,将它们提供给任何需要它们的人,并在以后处理它们。
如果我们说的是纯TDD,也就是写得好的代码(不仅仅是好的测试)需要添加一个模拟测试。对于嘲讽,我使用Jmock,它与Junit配合得很好。通过基于mock的方法和程序的内部边界,我得到了设计良好的相互通信的对象。这是可读性和可维护性的重要一步。EasyMock也不错,但是Jmock是我个人的首选。
从Java世界到Ruby世界,RSpec很优秀,也有DSL来描述场景。现在Rbehave已经集成到Rspec中,这样的集成将成为Ruby world中的首选。有趣的是,Rbehave源自Jbehave,这是一个行为驱动的开发测试框架。如果你喜欢BDD模式来收集和确定需求,你会喜欢Jbehave和RSpec。
0条评论