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


    测试用例

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

    Junit版本

    Junit3.8    基于反射的

    Junit4    基于注解的

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

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

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

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

    看下目录结构

    目录src与目录test内

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

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

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

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

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

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

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

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

        public static void main(String[] args) {
    
            junit.textui.TestRunner.run(CalcTest.class);
    
        }

    运行结果如下:

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

    在实际开发里面,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(有中文版)

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

  • 相关阅读:
    sleep(),wait(),yield(),notify()
    (三)终结任务
    (二)共享受限资源
    (一)基本的线程机制
    (十八)多线程
    (十七)泛型程序设计
    视频监控中带宽及存储容量的计算
    turtle实例
    python ——钟表
    Python Tkinter Grid布局管理器详解
  • 原文地址:https://www.cnblogs.com/dannybear/p/4814886.html
Copyright © 2020-2023  润新知