Junit 入门使用教程

作者:YSOcean

出处:http://www.cnblogs.com/ysocean/

目录



回到顶部

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 的用法

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

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 

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()方法正确");
        }

    }
}

  

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

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

public class CalculatorTest {

    @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呢?鼠标放在需要测试的方法中,右键,Run As ---->JUnit Test

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

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

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

  [email protected]: 测试方法

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

  [email protected]: 被忽略的测试方法:加上之后,暂时不运行此段代码

  [email protected]: 每一个测试方法之前运行

  [email protected]: 每一个测试方法之后运行

  [email protected]: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法

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

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

public class CalculatorTest {
    Calculator c = null;

    @Before
    public void testBeforeClass(){
        c = new Calculator();
    }
    @Test
    //测试 add()方法
    public void testAdd(){
        int result = c.add(1, 2);
        //Assert.assertEquals(result, 3);
        //等价于:
        if(result == 3){
            System.out.println("add()方法正确");
        }
    }

    @Test
    //测试 sub()方法
    public void testSub(){
        int result = c.sub(2, 1);
        //Assert.assertEquals(result, 1);
        //等价于:
        if(result == 1){
            System.out.println("sub()方法正确");
        }
    }

}

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

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");
    }
}

  结果为:

@BeforeClass
构造函数
@Before
@Test
@After
@AfterClass

  

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

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

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

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

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

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

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

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

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");

    }

}

原文地址:https://www.cnblogs.com/panchanggui/p/10019433.html

时间: 2024-10-12 13:34:52

Junit 入门使用教程的相关文章

JUnit三分钟教程 ---- 快速起步

JUnit三分钟教程 ---- 快速起步 JUnit是个好东西,做大点的项目离不开这东西,实际中用的时候也因为时间和人力的关系,仅仅写个TestCase(测试单元),运行一下看看就扔过去了,过后也不维护测试代码. 所用的JUnit包为3.8.2. JUnit这东西,说复杂也复杂,说简单也简单,关于JUnit的叙述解说网上一堆一堆,可是就找不到个简单点又能说明问题的附带有完整代码可运行的例子.下面给出一个三分钟的入门的例子大家看看. 一.写测试目标(业务相关的类) /** * * 测试对象 * U

Android视频录制从不入门到入门系列教程(三)————视频方向

运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子的: 就是说,即使你是竖着拿手机的,Camera提供给你的视频图像的方向还是上图那样横着的图片. 我们可以通过下述方向改变Camera提供的视频图像的方法: camera.setDisplayOrientation(90); 让图像顺时针旋转90度,视频图像的方向就正常的. 本篇文章DEMO下载.

android入门开发教程之网络性能的优化

我在麦子学院上android开发的时候,麦子学院android开发老师讲到Android开发过程中经常会涉及到性能优化的问题,应该从基础.网络.测试等各个层面进行整合优化.现在咱们聊聊Android开发之网络性能的优化. 1)避免频繁网络请求 访问server端时,建立连接本身比传输需要跟多的时间,如非必要,不要将一交互可以做的事情分成多次交互(这需要与Server端协调好).有效管理Service 后台服务就相当于一个持续运行的Acitivity,如果开发的程序后台都会一个service不停的

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程

WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程 WebLogic中间件基础入门培训教程_WebLogic部署配置视频教程5 风哥主讲:介绍Oracle WebLogic中间件的概念,WebLogic概念,域,JDK,JVM,数据源,连接池,控制台,集群相关,Weblogic安装与部署. 视频学习地址: http://edu.51cto.com/course/course_id-3744.html

Apple Swift编程语言入门中文教程

Apple Swift编程语言入门教程 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&OSX开发有所帮助. Swift是供iOS和OS X应用编程的新编程语言,基于C和Objective-C,而却没有C的一些兼容约束.S

LEADTOOLS Android库入门使用教程

一.搭建Android开发环境 在使用LEADTOOLS Android库和demo之前,需要根据以下步骤搭建Android开发环境: 1.安装Java Development Kit (JDK) 1.6 ,该开发包中包含 Java Runtimes (JRE) 和库. 2.安装Eclipse. 3.安装Android SDK. 4.在web页面点击USE AN EXISTING IDE,然后点击Download the SDK Tools for Windows. 5.启动Android SD

PHP入门培训教程 PHP 数据类型

PHP入门培训教程 PHP 数据类型 PHP 支持八种原始类型(type),下面兄弟连PHP培训小编来给大家列出:. 四种标量类型: string(字符串) integer(整型) float(浮点型,也作 double ) boolean(布尔型) 两种复合类型: array(数组) object(对象) 两种特殊类型: resource(资源) NULL(空) 查看变量类型 通过 gettype() 函数可以方便的查看某个变量的类型: <?php$var_bool = TRUE;// a b

php页面get方法实现ajax,入门实例教程

ajax,入门实例教程 本例针对php页面,做了一个小的demo加深对ajax的理解 1.文档结构: 共有ajax.php 和action.php 2个页面. 2.源码如下: /*ajax.php页面*/<!DOCTYPE html> <html lang="en"> <head> <title> ajax</title> <script type="text/javascript"> func