zoukankan      html  css  js  c++  java
  • Junit 入门使用教程 转自:http://www.cnblogs.com/ysocean/p/6889906.html

    1、Junit 是什么?

      JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

      注意:Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能

    2、Junit 能做什么?

      我们知道 Junit 是一个单元测试框架,那么使用 Junit 能让我们快速的完成单元测试。

      通常我们写完代码想要测试这段代码的正确性,那么必须新建一个类,然后创建一个 main() 方法,然后编写测试代码。如果需要测试的代码很多呢?那么要么就会建很多main() 方法来测试,要么将其全部写在一个 main() 方法里面。这也会大大的增加测试的复杂度,降低程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

    3、Junit 的用法

      一、首先下载 Junit jar 包,这里给两个版本的百度云下载地址:

      ①、Junit 4.12版本    链接:http://pan.baidu.com/s/1c2cRqdM 密码:hfix

      ②、Junit 4.8 版本     链接:http://pan.baidu.com/s/1qY8WVGK 密码:ma2u

      

      二、下载完成之后,在项目中将 下载的 jar 包放进去,然后右键,Build--->Add Build Path  即可。

      

       如果你是用 eclipse 开发,也可以不用下载那些jar包,eclipse内部集成了,我们只需要引入即可:

        ①、选中项目,右键Build--->Add Library

          

        ②、弹出来的界面,选中 JUnit,点击 next

          

         ③、选中 Junit 的版本,一般我们都用 4.0 以上的。点击 Finish

           

       

      三、我们先看下面这个例子,看一下 Junit 的用法

      ①、编写代码(需要测试的类)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class Calculator {
         
        /**
         * 传入两个参数,求和
         * @param a
         * @param b
         * @return
         */
        public int add(int a,int b){
             
            return a+b;
        }
         
        /**
         * 传入两个参数,求差
         * @param a
         * @param b
         * @return
         */
        public int sub(int a,int b){
             
            return a-b;
        }
     
    }

      ②、编写测试类

        一、不用Junit   

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class CalculatorTest {
     
        public static void main(String[] args) {
            Calculator c = new Calculator();
            //测试 add()方法
            int result = c.add(12);
            if(result == 3){
                System.out.println("add()方法正确");
            }
             
            //测试 sub()方法
            int result2 = c.sub(21);
            if(result2 == 1){
                System.out.println("sub()方法正确");
            }
             
        }
    }

      那么我们可以看到,不用 Junit 只能写在 main()方法中,通过运行结果来判断测试结果是否正确。这里需要测试的只有两个方法,如果有很多方法,那么测试代码就会变得很混乱。

        二、使用 Junit(看不懂 Assert.assertEquals()方法没关系,可以自己写 if()语句来判断)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class CalculatorTest {
         
        @Test
        //测试 add()方法
        public void testAdd(){
            Calculator c = new Calculator();
            int result = c.add(12);
            Assert.assertEquals(result, 3);
        }
         
        @Test
        //测试 sub()方法
        public void testSub(){
            Calculator c = new Calculator();
            int result = c.sub(21);
            Assert.assertEquals(result, 1);
        }
     
    }

      如何运行 Junit呢?鼠标放在需要测试的方法中,右键,Run As ---->JUnit Test

      

    结果出现如下的绿色横条,则测试通过,红色横条,则测试失败

      

    那么由上面可以看到,使用 Junit 不需要创建 main() 方法,而且每个测试方法一一对应,逻辑特别清晰。可能有读者会问,这样写代码量也并不会减少啊,那么你接着往下看:

    首先介绍 Junit 的几种类似于 @Test 的注解:

      1.@Test: 测试方法

        a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
        b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过

      2.@Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码

      3.@Before: 每一个测试方法之前运行

      4.@After: 每一个测试方法之后运行

      5.@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法

      6.@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After

     那么上面的例子,我们可以看到,每个 @Test 方法中都有 Calculator c = new Calculator();即类的实例化,那么我们可以将其放入到 @Before 中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class CalculatorTest {
        Calculator c = null;
         
        @Before
        public void testBeforeClass(){
            c = new Calculator();
        }
        @Test
        //测试 add()方法
        public void testAdd(){
            int result = c.add(12);
            //Assert.assertEquals(result, 3);
            //等价于:
            if(result == 3){
                System.out.println("add()方法正确");
            }
        }
         
        @Test
        //测试 sub()方法
        public void testSub(){
            int result = c.sub(21);
            //Assert.assertEquals(result, 1);
            //等价于:
            if(result == 1){
                System.out.println("sub()方法正确");
            }
        }
     
    }

      

    同理:别的注解用法我们用一个类来看:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class JunitTest {
        public JunitTest() {
            System.out.println("构造函数");
        }
     
        @BeforeClass
        public static void beforeClass(){
            System.out.println("@BeforeClass");
        }
         
        @Before
        public void befor(){
            System.out.println("@Before");
        }
         
        @Test
        public void test(){
            System.out.println("@Test");
        }
         
        @Ignore
        public void ignore(){
            System.out.println("@Ignore");
        }
         
        @After
        public void after(){
            System.out.println("@After");
        }
         
        @AfterClass
        public static void afterClass(){
            System.out.println("@AfterClass");
        }
    }

      结果为:

    1
    2
    3
    4
    5
    6
    @BeforeClass
    构造函数
    @Before
    @Test
    @After
    @AfterClass

      

    注意:编写测试类的原则: 

        ①测试方法上必须使用@Test进行修饰

            ②测试方法必须使用public void 进行修饰,不能带任何的参数

            ③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开

            ④测试类所在的包名应该和被测试类所在的包名保持一致

            ⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖

            ⑥测试类使用Test作为类名的后缀(不是必须)

            ⑦测试方法使用test作为方法名的前缀(不是必须)

  • 相关阅读:
    PDOStatement::closeCursor
    PDOStatement::bindValue
    oracle drop table recyclebin恢复
    mysql基准测试工具tpcc-mysql安装、使用、结果解读
    MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及的几个字符集
    [MySQL FAQ]系列 — EXPLAIN结果中哪些信息要引起关注
    [MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率
    数据库专业词语
    老叶观点:MySQL开发规范之我见
    [MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
  • 原文地址:https://www.cnblogs.com/xuqing0422/p/10041790.html
Copyright © 2011-2022 走看看