软件测试工具与实践(二)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单元测试相关工具
Eclipse下的Junit插件(是Eclipse3.x以上版本的标准插件)
单元测试相关工具 Junit的主要特性
单元测试相关工具
有关JUnit详细信息请关注它的官方网站 http://junit.org/ 网站中有详细的教程:
单元测试相关工具
断言:不符合断言预期的测试会Fail 常用断言:assertXXX
• Junit的断言封装了大量的比较操作,使验证变得简单。
单元测试相关工具
框架是如何运行的? Runner 为什么没有main方法也能跑?这就是框架的作用了。 Junit框架中的Runner部分负责把测试流组织起来,其实 main方法在Runner里。这里面用到了一些Java的高级技术 。有兴趣可以查看源码。(Junit是开源的) 在console下我们也能跑Junit测试,但实际情况不是这样。 我们会: 1.在IDE下用集成的图形化Runner 2.在持续集成环境下被ant或者maven或者其它插件调用。
单元测试相关工具
问题: 如果碰到如下情况:某个方法依赖于其他一些难以操控的东西 如网络、数据库,外部程序等。该怎么做单元测试? 例子: 1.一段代码,当文件系统满了会返回错误提示。 2.你的代码要连银联的支付接口。 3.在某个系统初始化过程中,需要连接2个数据库,1个监 控平台(监控平台会有十几项检查内容)。
https://github.com/junit-team/junit/wiki


单元测试相关工具
Junit只是针对Java语言的单元测试工具 不同语言下会有不同的单元测试工具,他们大同小异,各 有优缺点。

C++单元测试工具的特性对比 一个完整的单元测试工具列表(上百种): http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
单元测试相关工具 Junit的例子 Junit是一个开源的单元测试工具(框架) 它具有上页中单元测试工具应有的特性。
单元测试相关工具
• 如何测试这段代码?
单元测试相关工具
• 老土的方法
单元测试相关工具
! 把测试代码写到被测代码同一个类中会污染代码。 ! 单写一个测试会有所改善,但无法大规模写测试用例。 ! 比对靠人眼,没自动化。 ! 用例一多一次要全部运行,如果追求良好的执行结果输 出需要写很多复杂的代码。
单元测试相关工具 Mock框架的例子--Mockito
Mockito是开源软件,它的网址:http://code.google.com/p/mockito/
单元测试相关工具
上页解读: import static org.mockito.Mockito.*; 所有Mockito的常用方法都在这个包里,静态引用让我们使 用起来更方便。还记得junit中assert也是被静态引用的么? LinkedList mockedList = mock(LinkedList.class); 使用mock方法创建mock对象,注意,我们将LinkedList的 类型当做参数传了进去。这里边一定用了反射技术。 when(mockedList.get(0)).thenReturn("first"); 使用when和thenReturen方法,其作用不言而明。
完整的Mockito教程网址: http://docs.mockito.googlecode.com/hg/latest/org /mockito/Mockito.html 同样,每种不同的语言都会有他们的mock框架。 一些常用mock框架:
jmock http://jmock.org/ easymock http://easymock.org/ powermock http://code.google.com/p/powermock/ googlemock(c++) http://code.google.com/p/googlemock/
单元测试相关工具
• 使用Junit测试框架后代码变为:
单元测试相关工具
改进后的测试方法:单一用例单一职责。
单元测试相关工具
你需要学习Junit的特性。Junit的行为主要通过元数据(Annotation)控制。 常见的元数据: @Test 表示该方法是一个测试 @ignore: 该元数据标记的测试方法在测试中会被忽略。 @Before: 使用了该元数据的方法在每个测试方法执行之前都要执行一次。 @After: 使用了该元数据的方法在每个测试方法执行之后要执行一次。 @BeforClass 每次初始化测试类的时候会执行一次 @AfterClass 每次销毁测试类的时候会执行一次
单元测试相关工具

你的问题: 那我们应该怎么做?
2分钟讨论时间, 请和临近同学讨论。
单元测试相关工具

参考答案:
1.熟悉单元测试对后续测试工作的影响。 80%的缺陷都是代码级别的缺陷(一种统计口径)。 2.力所能及的推动单元测试良好开展。 ! 呼吁、倡导单元测试。 ! 提供用例设计思路。 ! 设置功能测试的入口标准。 ! 直接上手? ! 。。。
单元测试相关工具 非技术原因: ! 技能不足 ! 没有单测习惯 ! 没有从中得到好处 ! 女朋友病了 ! N种理由。。。
请作为打破不做单测 传统的一员而存在!
单元测试相关工具 推荐书籍
单元测试相关工具 推荐书籍
你的职业目标是?
单元测试相关工具
பைடு நூலகம்
你的问题: 单元测试和测试人员有关系么?
单元测试相关工具 答案:
单元测试是开发人员义不容辞的责任。 但是在“交付高质量软件”这件事情上,测试人员和开发人 员是同舟共济的关系。 因此测试人员对单元测试 不能事不关己高高挂起。
如何模拟抛出异常? when(mockedList.get(3)).thenThrow( new RuntimeException()); 如果没有模拟,则返回null System.out.println(mockedList.get(4));
单元测试相关工具
单元测试相关工具 单元测试工具解决什么问题?
1分钟讨论时间。
单元测试相关工具 参考答案:
让单元测试变得简单、高效、杜绝或者减少入侵性。 单元测试工具应该提供的特性: ! 测试代码与生产代码分离。 ! 测试用例之间能够很好的组织、划分。 ! 比较工作变得简单。 ! 让单元测试代码能够以多种形式在不同阶段执行。 ! 快速执行,灵活执行。 ! 良好的报表。 ! 与其它工具良好的接合。 ! 支持数据驱动。
软件测试工具与实践
讲师:刘晓光 lxg0618@163.com
第二课:代码质量相关工具
讲师:刘晓光 lxg0618@163.com
代码质量相关工具
声明:本节所要讲的工具可能普通的测试工作者不会用到。 但是,如果你是测试Leader,资深测试开发工程师,测试架 构师,你可能经常要跟这些工具打交道。

单元测试相关工具
问题:有了良好的单元测试框架与mock框架就能做好单 元测试了么? 答案:显然是否定的。
单元测试相关工具
被测代码的bad smells
重复代码(Duplicated Code) 长方法(Long Method) 条件逻辑过于复杂(Conditional Complexity) 基本类型偏执(Primitive Obsession) 不恰当的暴露(Indecent Exposure) 解决方案蔓延(Solution Sprawl) 异曲同工的类(Alternative Classes with Different Interfaces) ! 懒惰的类(Lazy Class) ! 巨大的类(Large Class) ! Switch语句(Switch Statements)->command模式 ! 组合爆炸(combinatorial explosion) ! 怪异解决方案(Oddball Solution) ! ! ! ! ! ! !
3分钟讨论
单元测试相关工具
• 参考答案:我们需要Mock技术。 mock的英文释义是“仿制品”,顾名思义,我们要在代码 中提供外部依赖的“仿制品”来模拟外部依赖项的数据或者 行为。 我们能够自己用代码从头编写mock,但是这样会很麻烦, 幸运的是,现在有很多现成的Mock框架可以使用。
代码静态规则扫描工具
问题: 如何找出代码中一些潜在的bug?如Try-catch-finally问题? 周期很长,由很多批人维护的软件,如何保持很好的可维护性? 团队人员经常更换,如何让新的团队成员迅速遵循已有的代码 规范? 如何迅速识别出接手的大量遗留代码中的问题?
设置规则检查项: (安装后需要重启eclipse)
代码静态规则扫描工具
代码静态规则扫描工具
代码静态规则扫描工具
代码静态规则扫描工具
代码静态规则扫描工具
单元测试相关工具 拓展阅读:
依赖注入的概念 马丁福勒的的最经典定义 http://www.martinfowler.com/articles/injection.html 一篇不错的介绍依赖注入的文章: http://www.cnblogs.com/xingyukun/archive /2007/10/20/931331.html
代码静态规则扫描工具 参考答案:静态代码规则扫描工具
代码静态规则扫描工具
PMD的例子: 安装:以Eclipse插件的形式安装 插件安装地址: http://pmd.sf.net/eclipse
代码静态规则扫描工具
单元测试相关工具
参数通配符 get(0),get(1),get(999) 参数全部要输入具体的值。 能否有通配符一类的东西? mockito提供了这一特性 看下列代码:注意anyInt()方法。

单元测试相关工具
相关文档
最新文档