测试用例

单元测试时每个开发人员必需掌握的,是保证开发过程中代码的准确性,无误性,保证代码质量。敏捷开发模式是先根据用户需求写测试用例,考虑基本所有用户所需要的情况,再写实现方法。单元测试有很多种,当前主流的是Junit,它是java领域测试中应用最多的开源框架

Junit版本

Junit3.8    基于反射的

Junit4    基于注解的

 

规范:junit测试代码与待测试源代码(src)分开,方便剔除测试代码。

在项目工程中new->Source Folder新建一个源代码目录"test"

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

在test源码目录中,创建与src目录下相同结构的包,这样测试类中就不必导入源代码 所在的包,因为他们位于同一个包下面

测试类的命名规则:假如目标类是 Calc,那么测试类应该命名为 TestCalc 或者是 CalcTest

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

看下目录结构

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

目录src与目录test内

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

编译后放到相同的目录bin内

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

 

测试用例(Test case)方法须满足如下原则:

  1. public修饰符修饰;
  2. 无返回值void;
  3. 无方法参数                 //不满足前三条的测试方法不会执行。
  4. 方法名须以test开头。        //命名规范

 

测试要保持状态的一致性,测试之前是什么状态,测试执行完之后就应是什么状态,而不应该由于测试执行的原因导致状态的改变。比如对一些文件的修改和对数据库的访问修改。

测试用例之间一定要保证完全的独立性,不允许出现任何依赖关系。

对于待测方法的测试前后的工作可以在setUp()和tearDown()方法中完成。他们的执行顺序如图:

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

测试方法不能依赖方法的执行顺序,结合上图,可以看出测试方法并不按照顺序执行,但是每次测试,前后都会执行setUp()和tearDown()。

 

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

Junit 默认有一个视图,当然,也有写main方法执行的Java Application运行方式。即:

    public static void main(String[] args) {

        junit.textui.TestRunner.run(CalcTest.class);

    }

 

 

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

运行结果如下:

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

这里第一行的每个点代表一个测试。

 

在实际开发里面,main方法的测试用得会多一点,因为开发中会把它放到自动构建文件中,直接一点就自动运行了。总归,图形界面会慢很多。

 

 

对于同一个方法的不同情况,要进行多次不同情况的测试,如测试div()方法,有除数是否为0两种情况。对div()方法做修改,判断除数,若为0,抛出异常:

public int div(int a, int b) throws Exception {

        if (b==0) {

            throw new Exception("除数不能为0!");

        }

        return a / b;

    }

 

测试方法要进行try{…}catch{…}捕获异常处理

    public void testDiv() {

        int result = 0;

        try {

            result = cal.div(4, 2);

        } catch (Exception e) {

            e.printStackTrace();

            Assert.fail();// 测试除数非0情况下捕捉到异常,测试失败

        }

        Assert.assertEquals(2, result);

        // System.out.println("testDiv() invoke");

    }

 

    /**

     * 测试0作除数的情况

     */

    public void testDivByZero() {

        try {

            cal.div(4, 0);

            Assert.fail();// 测试0作除数的情况,若能到达以一步,说明上一步没抛出异常,测试失败

        } catch (Exception e) {

            // e.printStackTrace();

            Assert.assertEquals("除数不能为0!", e.getMessage()); //对捕获到的异常断言

        }

        // System.out.println("testDiv() invoke");

    }

 

单元测试是用来判断程序的执行结果与预期的结果是否一致,通过Assert的参数类型不同的重载方法assertEquals(expected, actual), assertTure(actual), assertFalse(actual), assertNull(actual)等断言方法进行断言,判断被测试的方法返回结果actual是否符合预期的结果。So,单元测试不是证明你是对的,而只是证明没有错误。

 

展示代码已推送到github 戳此获取代码

 

 

关于junit鄙人推荐一本书:Junit in action(有中文版)

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

 

关于单元测试,还有一种测试方法:TestNG     有兴趣的可以搜搜看看。

相关文章:

  • 2021-06-10
  • 2021-10-11
  • 2022-01-02
  • 2022-12-23
  • 2021-12-03
  • 2021-12-11
  • 2022-01-17
  • 2021-09-14
猜你喜欢
  • 2022-12-23
  • 2021-05-24
  • 2021-06-02
  • 2022-12-23
  • 2022-02-14
  • 2021-06-04
相关资源
相似解决方案