• 1. Java Unit Training
  • 2. 主要内容 为什么要做单元测试 单元测试要做什么 如何做单元测试
  • 3. 为什么要做单元测试丰田召回门事件 余下省略一万字。。。。。。
  • 4. 关于单元测试单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。 单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护
  • 5. 单元测试是找错单元测试是开发者编写的一段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为是否与预期一致。
  • 6. 单元测试是由程序员自己完成的单元测试是由程序员自己来完成,不是测试人员,也不是其他开发任务,代码由谁编写,单元测试也是有谁完成。最终受益的也是程序员自己。程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致
  • 7. 单元测试的好处 对于中间层组件测试和缺少图形用户界面的组件测试 要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。 重构也是要求改一点测一点,减少回归错误造成的时间消耗 当你试图打印输出一些信息或调试一个表达式时,写一些测试代码来替代那些传统方法
  • 8. 如何做单元测试下载安装 下载junit4的jar包, 安装 导入工程,加入class path路径下; 在IDE建立JUNIT_HOME的变量,引入到工程class path,全局变量,不需要每次导入独立工程;
  • 9. 如何做单元测试目录结构 通常src 下面存放工程代码文件; 在src的同级目录建立另一个资源目录test,该目录来存放所有单元测试用例; test目录下的包名保持与src目录下的报名一致,既对应测试代码的报名对应src目录下的包名 命名 测试代码文件以源文件名后再加Test之类来标示该文件是测试文件;如源文件为HelloWord.java,测试代码文件应该为HelloWordTest.java
  • 10. 如何做单元测试新建单元测试用例 @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } 定义测试用例,即测试方法以测试源方法 在测试用例的方法上一行加@Test,即表示该方法是测试方法,在运行测试时被自动识别;
  • 11. 如何做单元测试如何编写测试用例 假设要从一个数组中取最大的那个数,如何针对该方法写测试用例; int getLargestNumber(int[] arry);
  • 12. 如何做单元测试测试用例: [7, 8, 9] -> 9 [8, 9, 7] -> 9 [9, 7, 8] -> 9 [7, 9, 8, 9] -> 9 [1] -> 1 [-9, -8, -7] -> -7 要点就是正负数的测试,数组长度不同,边界值的测试
  • 13. 如何做单元测试如何编写测试用例2 假设有一个方法,根据传入的参数返回不同的结果;输入小于0的数,返回0;在0到50之间返回50;在50到100之间返回100;大于100返回1000;
  • 14. 一些注意事项 1. setUp()是在执行用例测试之前运行和tearDown()是执行完所有用例之后运行。  2. 不要依赖或假定测试运行的顺序,自定义的测试方法是没有先后顺序。  3. 将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.) 4. 测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。 5.不要硬性规定数据文件的路径。 6. 充分利用Junit 的assert/fail 方法   assertSame()用来测试两个引用是否指向同一个对象   assertEquals()用来测试两个对象是否相等 尽量少用System.out.println来观察输出结果
  • 15. 提升篇有时我们要测试的类要与其他类发生联系,因此往往在测试此类的代码中也将与之联系的类也一起测试了。这种测试,将使被测试的类直接依赖于其他类,一旦其他类发生改变,被测试类也随之被迫改变。更重要的是,这些其他类可能尚未经过测试,因此必须先测试这些类,才能测试被测试类。这种情况下,测试驱动开发成为空谈 ,甚至无法进行。
  • 16. 提升篇虚拟对象(mock object)就是为此需要而诞生的。它通过JDK中的反射机制,在运行时动态地创建虚拟对象。在测试代码中,我们可以验证这些虚拟对象是否被正确地调用了,也可以在明确的情况下,让其返回特定的假想值。而一旦有了这些虚拟对象提供的服务,被测试类就可以将虚拟对象作为其他与之联系的真实对象的替身,从而轻松地搭建起一个很完美的测试环境。 JMock是帮助创建mock对象的工具,它基于Java开发,在Java测试与开发环境中有不可比拟的优势,更重要的是,它大大简化了虚拟对象的使用
  • 17. 提升篇下载和安装jmock http://www.jmock.org/ 依赖的jar包 要使用jmock,需要将图片的包导入攻城class path路径
  • 18. 提升篇使用jmock Mockery: 这是一个模拟引擎,可以模拟出任何程序想要的对象; 在调用被测试方法之前,我们需要告诉模拟引擎我们想要做什么; 执行测试方法