博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Junit 单元测试基本使用方法
阅读量:4353 次
发布时间:2019-06-07

本文共 4151 字,大约阅读时间需要 13 分钟。

1、Junit是什么?

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
 
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

2、Junit有什么用?

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

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

3、Junit相比平常的测试方法有什么优点?

1、在实现自动单元测试的情况下可以大大的提高开发的效率。

2、减小回归错误的纠错难度。

3、减少回归错误造成的时间消耗。

4、Junit的用法

一、首先下载 Junit jar 包

二、下载完成之后,在项目中将 下载的 jar 包添加啊进去。

三、下面编写测试类

package com.nf147.bookstore_ssm.Test;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;    }}

1、不用Junit:

package com.nf147.bookstore_ssm.Test;
public class CalculatorTest {     public static void main(String[] args) {        Calculator c = new Calculator();        //测试 add()方法        int result = c.add(1, 2);        if(result == 3){            System.out.println("add()方法正确");        }                 //测试 sub()方法        int result2 = c.sub(2, 1);        if(result2 == 1){            System.out.println("sub()方法正确");        }             }}

 2、使用Junit:

package com.nf147.bookstore_ssm.Test;import org.testng.Assert;import org.testng.annotations.Test;public class Main {    @Test    //测试add方法    public void TestAdd(){        Calculator c = new Calculator();        int result = c.add(1,2);        Assert.assertEquals(result,3);    }    @Test    //测试sub方法    public void TestSub(){        Calculator c = new Calculator();        int result = c.sub(2,1);        Assert.assertEquals(result,1);    }}

 从上面两种方法中,我们可以看出,不使用Junit 要把代码写入Main里面,这里只有两个方法,如果有十几个方法,代码就会很乱,如果出错了也很难寻找错误所在地。

 接下来我们就运行测试类检查我们的代码

如果运行成功,代码没有错误,我们会出现1、1、0、0,而且颜色是为绿色的

如果运行失败,会出现1、0、1、0,颜色为红色,并且会告诉你错误的地方在哪,方便我们去修改代码

那么由上面可以看到,使用 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 中

package com.nf147.bookstore_ssm.Test;import org.junit.*;import org.testng.Assert;public class Main {    Calculator c = null;    @Before    public void testClass(){        c = new Calculator();    }    @Test    //测试add方法    public void TestAdd(){        int result = c.add(1,2);        System.out.println("加法");        Assert.assertEquals(result,3);    }    @Test    //测试sub方法    public void TestSub(){        int result = c.sub(2,1);        Assert.assertEquals(result,1);    }}

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

package com.nf147.bookstore_ssm.Test;import org.junit.*;public class JunitTest {    public JunitTest() {        System.out.println("构造函数");    }    @Before    public void befor(){        System.out.println("@Before");    }    @BeforeClass    public static void beforeClass(){        System.out.println("@BeforeClass");    }    @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");    }}

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

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

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

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

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

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

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

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

 

转载于:https://www.cnblogs.com/Qi1007/p/9720724.html

你可能感兴趣的文章
nyoj 1091 还是01背包(超大数dp)
查看>>
[Leetcode] jump game 跳跃游戏
查看>>
Linux两台服务器mysql数据库同步
查看>>
Git入门及上传项目到github中
查看>>
MyBatis源码解析(十)——Type类型模块之类型处理器TypeHandler
查看>>
关于unity3d调用摄像头的方法
查看>>
搜索--P1605 迷宫
查看>>
【XSY3344】连续段 DP 牛顿迭代 NTT
查看>>
【THUSC2017】【LOJ2978】杜老师 高斯消元
查看>>
RxJS核心概念之Subjet在angular2+上的应用
查看>>
[转]eclipse下编写android程序突然不会自动生成R.java文件和包的解决办法
查看>>
Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词
查看>>
AlertDialog的onCreateDialog与onPrepareDialog用法
查看>>
swift菜鸟入门视频教程-12-21讲
查看>>
PL/SQL 异常处理程序
查看>>
javascript小白学习指南1---0
查看>>
div:给div加滚动栏 div的滚动栏设置
查看>>
java随机函数使用方法Random
查看>>
链表中环的入口结点
查看>>
凤姐讲学英语
查看>>