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

时间:2024-06-09 17:32:50

测试用例&测试套件

举个栗子:

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

MyStack类:

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

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

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

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

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

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

创建测试套件约定:

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

贴代码

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

运行结果如图:

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