• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件单元测试利器 JUnit 4

发布: 2009-12-17 10:06 | 作者: 不详 | 来源: 领测国际软件测试网采编 | 查看: 48次 | 进入软件测试论坛讨论

领测软件测试网

      图3 JUnit 运行成功界面

  图3 <u><font color=JUnit 运行成功界面" src="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure003.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure003.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure003.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure003.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure003.jpg" />

  绿色的进度条提示我们,测试运行通过了。但现在就宣布代码通过了单元测试还为时过早。记住:您的单元测试代码不是用来证明您是对的,而是为了证明您没有错。因此单元测试的范围要全面,比如对边界值、正常值、错误值得测试;对代码可能出现的问题要全面预测,而这也正是需求分析、详细设计环节中要考虑的。显然,我们的测试才刚刚开始,继续补充一些对特殊情况的测试:

  public class TestWordDealUtil { …… //测试 null 时的处理情况 @Test public void wordFormat4DBNull(){ String target = null; String result = WordDealUtil.wordFormat4DB(target); assertNull(result); } //测试空字符串的处理情况 @Test public void wordFormat4DBEmpty(){ String target = ""; String result = WordDealUtil.wordFormat4DB(target); assertEquals("", result); } //测试当首字母大写时的情况 @Test public void wordFormat4DBegin(){ String target = "EmployeeInfo"; String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info", result); } //测试当尾字母为大写时的情况 @Test public void wordFormat4DBEnd(){ String target = "employeeInfoA"; String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_info_a", result); } //测试多个相连字母大写时的情况 @Test public void wordFormat4DBTogether(){ String target = "employeeAInfo"; String result = WordDealUtil.wordFormat4DB(target); assertEquals("employee_a_info", result); } }

  再次运行测试。很遗憾,JUnit 运行界面提示我们有两个测试情况未通过测试(图4)——当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);而当测试对 null 的处理结果时,则直接抛出了异常——测试错误(error)。显然,被测试代码中并没有对首字母大写和 null 这两种特殊情况进行处理,修改如下:

  //修改后的方法wordFormat4DB /** * 将Java对象名称(每个单词的头字母大写)按照 * 数据库命名的习惯进行格式化 * 格式化后的数据为小写字母,并且使用下划线分割命名单词 * 如果参数name为null,则返回null * * 例如:employeeInfo 经过格式化之后变为 employee_info * * @param name Java对象名称 */ public static String wordFormat4DB(String name){ if(name == null){ return null; } Pattern p = Pattern.compile("[A-Z]"); Matcher m = p.matcher(name); StringBuffer sb = new StringBuffer(); while(m.find()){ if(m.start() != 0) m.appendReplacement(sb, ("_"+m.group()).toLowerCase()); } return m.appendTail(sb).toString().toLowerCase(); }

  图4 JUnit 运行失败界面

  图4 <u><font color=JUnit 运行失败界面" src="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure004.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure004.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure004.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure004.jpg" _fcksavedurl="http://www.ibm.com/developerworks/cn/java/j-lo-junit4/figure004.jpg" />

  JUnit 将测试失败的情况分为两种:failure 和 error。Failure 一般由单元测试使用的断言方法判断失败引起,它表示在测试点发现了问题;而 error 则是由代码异常引起,这是测试目的之外的发现,它可能产生于测试代码本身的错误(测试代码也是代码,同样无法保证完全没有缺陷),也可能是被测试代码中的一个隐藏的bug

  请牢记!

  

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网