keep the bar green to keep the code clean——Junit详解(二)

测试用例&测试套件

举个栗子:

  1. 编写MyStack类模拟栈,并对其进行测试用例编写测试;
  2. 编写文件删除方法,并对其删除测试。 不再做演示,戳此获取代码

MyStack类:

  1. public class MyStatck {
  2.  
  3.    private String[] elements;
  4.    private int nextIndex;
  5.  
  6.    public MyStatck() {
  7.       elements = new String[100];
  8.       nextIndex = 0;
  9.    }
  10.  
  11.    public void push(String element) throws Exception {
  12.       if (nextIndex >= 100) {
  13.          throw new Exception("数组越界异常!");
  14.       }
  15.       elements[nextIndex++] = element;
  16.    }
  17.  
  18.    public String pop() throws Exception {
  19.       if (nextIndex <= 0) {
  20.          throw new Exception("数组越界异常!");
  21.       }
  22.       return elements[--nextIndex];
  23.    }
  24.  
  25.    public String top() throws Exception {
  26.       if (nextIndex <= 0) {
  27.          throw new Exception("数组越界异常!");
  28.       }
  29.       return elements[nextIndex - 1];
  30.    }
  31.  
  32. }

对push方法编写测试:

  1. public void testPush(){
  2.       MyStatck myStatck = new MyStatck();
  3.       //测试用例中对方法抛出的异常进行try-catch处理。
  4.       try {
  5.          myStatck.push("Hello World!");
  6.       } catch (Exception e) {
  7.          Assert.fail("push方法异常,测试失败。");
  8.       }
  9.       String result = null;
  10.       try {
  11.          result = myStatck.pop();
  12.       } catch (Exception e) {
  13.          e.printStackTrace();
  14.       }
  15.       //验证断言压入的字符串是否为"Hello World!"。
  16.       Assert.assertEquals("Hello World!", result);
  17.    }

虽然testPush测试用例中调用了pop方法,但对pop方法仍要创建新的测试用例:

测试中是可以使用其他方法,不然就没法进行测试了

  1. public void testPop(){
  2.  
  3.    MyStatck myStatck = new MyStatck();
  4.    try {
  5.       myStatck.push("Hello World!");
  6.    } catch (Exception e) {
  7.       e.printStackTrace();
  8.    }
  9.    String result = null;
  10.    try {
  11.       result = myStatck.pop();
  12.    } catch (Exception e) {
  13.       Assert.fail("pop方法异常,测试失败。");
  14.    }
  15.    //验证断言弹出的字符串是否为"Hello World!"。
  16.    Assert.assertEquals("Hello World!", result);
  17.  
  18. }

两个测试方法大致相同,但是侧重点不同。侧重对测试方法的断言判断。

每个test case只做一件事情,只测试一个方面。

随着项目的开发,类越来越多,测试也越来越多。单个测试的机械动作也会拖慢速度。那么就需要更简便的方法,只要点一下,就可以测试全部的测试用例——这种方法就是使用测试套件。

测试套件(TestSuite):可以将多个测试组合到一起,同时执行多个测试

创建测试套件约定:

  1. 在test源目录内创建测试类;
  2. 创建public static Test suite(){}方法。

贴代码

  1. public class TestAll extends TestCase {
  2.  
  3.    public static Test suite(){
  4.  
  5.       TestSuite suite = new TestSuite();
  6.       suite.addTestSuite(CalcTest.class);
  7.       suite.addTestSuite(DeleteAllTest.class);
  8.       suite.addTestSuite(MyStatckTest.class);
  9.  
  10.       return suite;
  11.  
  12.    }
  13. }

运行结果如图:

时间: 2024-11-08 23:01:55

keep the bar green to keep the code clean——Junit详解(二)的相关文章

keep the bar green to keep the code clean——Junit详解(一)

测试用例 单元测试时每个开发人员必需掌握的,是保证开发过程中代码的准确性,无误性,保证代码质量.敏捷开发模式是先根据用户需求写测试用例,考虑基本所有用户所需要的情况,再写实现方法.单元测试有很多种,当前主流的是Junit,它是java领域测试中应用最多的开源框架 Junit版本 Junit3.8    基于反射的 Junit4    基于注解的 规范:junit测试代码与待测试源代码(src)分开,方便剔除测试代码. 在项目工程中new->Source Folder新建一个源代码目录"te

单元测试JUnit 4(二)——keeps the bar green to keeps the code clean

1.Failure和Error Failure是指测试失败  Error是指测试程序本身出错  (int a=10/0) 2.JUnit常用注解 2.1 @RunWith: 可以更改测试运行器(继承org.junit.runner.Runner) 2.2 @Test: 将一个普通的方法修饰成为一个测试方法 Test有两个参数: expected 表示预期可能产生的异常,如果匹配则不报错 timeout 表示超时时间,如果超过这个时间没有完成,则抛出TestTimedOutException @T

VS Code 配置C++ 详解

VS Code 配置C++ 详解 我太难了一开始对配置一窍不通各种坑都踩过了,最后被逼无奈去学习了lauch.json还有tasks.json等文件的含义,才配置好了C++ 下面我写一个小白配置教程 首先下载VS Code还有MinGW,在VS Code商店里下载插件:Chinese.C/C++.CodeRunner.Include Autocomplete 然后创建一个HelloWorld.cpp然后点击调试,发现它要你选择环境,选择C++(GDB/LLDB),再选g++.exe,生成和调试活

iOS Code Signing: 解惑详解

原文链接地址:http://www.cnblogs.com/andyque/archive/2011/08/30/2159086.html iPhone开发的代码签名 代码签名确保代码的真实以及明确识别代码的来源.在代码运行在一个开发系统以前,以及在代码提交到Apple发布以前,Apple要求所有的的应用程序都必须进行数字签名.另外,Apple在发布每一个应用程序之前都要添加他自己的数字签名. 数字签名和签名标识 Apple要求所有的iphone应用程序都需要使用apple提供给已注册的ipho

Action Bar详解(二)

在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果. 一.添加ActionBar 1.不需要导入ActionBar,因为在android3.0或者以上版本中,ActionBar已经默认的包含在Activity中2.在Android3.0的默认主题“holographic”中,已经创造了ActionBar3.当android:minSdkVersion 或者 an

【转】Code First 属性详解

下面解释每个配置的作用 Table :用于指定生成表的表名.架构信息. Column :用于指定生成数据表的列信息,如列名.数据类型.顺序等. Key :用于指定任何名称的属性作为主键列并且默认将此列作为标识列(如果不想默认生成标识可以指定"DatabaseGenerated"属性的值为"None"),如果不指定此标记属性,将根据EF默认约定创建主键.如上代码指定"No"为"Employee"的主键. Required :用户

【转】Windows Error Code(windows错误代码详解)

本文来自: http://blog.sina.com.cn/s/blog_5e45d1be0100i0dr.html http://blog.sina.com.cn/s/blog_5e45d1be0100i0dt.html http://blog.sina.com.cn/s/blog_5e45d1be0100i0dv.html 这三篇,因为格式实在太乱,因此拿来整理了一下.找这个的原因是今天在改程序的时候蹦出来个WindowsError: [Error 2],也没有说这个东西是什么错误.于是百度

Windows Error Code(windows错误代码详解)

0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒绝访问. 6 句柄无效. 7 存储控制块被损坏. 8 存储空间不足,无法处理此命令. 9 存储控制块地址无效. 10 环境错误. 11 试图加载格式错误的程序. 12 访问码无效. 13 数据无效. 14 存储器不足,无法完成此操作. 15 系统找不到指定的驱动器. 16 无法删除目录. 17 系统无法将文件移到不同的驱动器. 18 没有更多文件. 19 介质受写入保护. 2

Status Code状态码详解对照表

状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在请求完成后向客户端发送一个最终响应. 101 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求.在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议. 只有在切换新的协议更有好处的时候才应该采取类似措施.例如,切换到