tanyuanji@126.com

版本历史

JUnit

该教程主要讲解 JUnit 4.x 版本的使用,以及如何在Eclipse IDE 中如何使用JUnit

 

目录

tanyuanji@126.com    1

1. Junit介绍    3

1.1. 简介    3

2. JUnit 优点    3

2.1. 对于极限编程而言    3

2.2. 对于重构而言    3

2.3. 其他情况    3

3. 使用 JUnit    3

3.1. 使用JUnit 进行单元测试    3

3.2. 可以使用的 JUnit 注解列表    4

3.3. 断言(Assert)语句    5

3.4. 创建测试套件    6

3.5. 在 Eclipse 之外执行JUnit    7

4. 安装JUnit    8

4.1. Eclipse集成JUnit    8

4.2. 下载Junit    8

5. Eclipse对JUnit的支持    8

5.1. 创建 JUnit 测试    8

5.2. 运行 JUnit 测试    8

5.3. JUnit静态导入的设置    10

5.4. 创建JUnit 测试套件向导    12

5.5. 异常的测试    14

 

 

 

1. Junit介绍

1.1. 简介

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中为最成功的一个。 JUnit有它自己的JUnit扩展生态圈。

 

多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

2. JUnit 优点

2.1. 对于极限编程而言

要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在极限编程中,基本过程是这样的:构思-> 编写测试代码-> 编写代码-> 测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

2.2. 对于重构而言

其好处和极限编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。

2.3. 其他情况

我们在开发的时候使用junit写一些适当的测试也是有必要的,因为一般我们也是需要编写测试的代码的,可能原来不是使用的junit,如果使用junit,而且针对接口(方法)编写测试代码会减少以后的维护工作,例如以后对方法内部的修改(这个就是相当于重构的工作了)。另外就是因为junit有断言功能,如果测试结果不通过会告诉我们哪个测试不通过,为什么,而如果是像以前的一般做法是写一些测试代码看其输出结果,然后再由自己来判断结果使用正确,使用junit的好处就是这个结果是否正确的判断是它来完成的,我们只需要看看它告诉我们结果是否正确就可以了,在一般情况下会大大提高效率。

3. 使用 JUnit

3.1. 使用JUnit 进行单元测试

JUnit 4.x 引用了注解的方式来对方法进行测试。通常测试方法都是被包含在一个 测试类

使用下面的代码来创建一个单元测试 . 通过如下操作: FileNewJUnitJUnit Test case.

    @Test

    public
void testMultiply() {

        MyClass tester = new
MyClass();

        

        assertEquals( "10 x 5 must be 50 " , 50, tester.multiply( 10, 5 ) );

    }

JUnit 假设可以使用任意的顺序执行测试方法。因而测试不依赖于其他的测试方法。

可以使用注解 @org.junit.Test 来修饰方法,以创建一个测试方法。然后使用预期的值 与 真实的值来检查方法是否正确。

你可以使用 Eclipse IDE方式来运行一个测试类,通过如下操作:右键点击需要测试的类并且选择 Run Run AsJUnit Test

也可以使用类 org.junit.runner.JUnitCore运行测试类,而不依赖于Eclipse。

该方法可以标记需要测试的类,选择要执行的测试。只有被选定的测试将会执行。

3.2. 可以使用的 JUnit 注解列表

下表给出了JUnit 4.x可以使用的注解的一个概述.

 

表 1. JUnit4注解

注解

描述

@Test

public void method()

@Test 注解代表方法是一个测试方法。

@Test (expected = Exception.class)

表示预期会抛出Exception.class 的异常

@Test(timeout=100)

表示预期方法执行不会超过 100 毫秒.

@Before
public void method()

表示该方法在每一个测试方法之前运行,可以使用该方法进行初始化之类的操作

@After
public void method()

表示该方法在每一个测试方法之后运行,可以使用该方法进行释放资源,回收内存之类的操作

@BeforeClass
public static void method()

表示该方法只执行一次,并且在所有方法之前执行。一般可以使用该方法进行数据库连接操作,注意该注解运用在静态方法。

@AfterClass
public static void method()

表示该方法只执行一次,并且在所有方法之后执行。一般可以使用该方法进行数据库连接关闭操作,注意该注解运用在静态方法。

@Ignore

表示该方法忽略。一般在低层代码有所改动,但是未实现,可以暂时忽略掉。也可以忽略掉执行时间过长的测试。

 

3.3. 断言(Assert)语句

JUnit在类 Assert提供了一些静态的方法来测试某些条件。这些方法一般以 assert开头,允许你指定消息( message ),预期的值 ( expected ),真实的值 ( actual )。一个断言方法比较返回的真实值和预期值,如果比较失败则会抛出 AssertionException 异常

 

下表给出了JUnit 4.x可以使用的断言方法的一个概述. 参数中的[]表示可选。

表 2. 断言方法

语句

描述

fail(String)

表示让测试方法失败。一般用于某些代码执行不到,或者在fail代码之前就失败了。参数是可选的。

assertTrue([message], boolean condition)

表示给出的条件断言为真。.

assertFalse([message], boolean condition)

表示给出的条件断言为假。.

assertEquals([String message], expected, actual)

表示测试两个值的内容相等。注意数组是检查引用相同而不是数组的内容。

assertEquals([String message], expected, actual, tolerance)

测试float或double值匹配。容差是小数点后的位数,必须是相同的。assertEquals( 1.1f, 1.1111d, 1);

assertNull([message], object)

表示检查的对象为空。

assertNotNull([message], object)

表示检查的对象为非空。

assertSame([String], expected, actual)

表示两个变量指向同一个引用。

assertNotSame([String], expected, actual)

表示两个变量指向非同一个引用。

 

3.4. 创建测试套件

如果你须有多个测试单元,可以合并成一个测试套件进行测试。并且可以按照指定的顺序执行所有的测试类。

下面的代码示例创建了一个测试套件来执行两个测试单元。如果你要添加其他的测试单元可以使用语句 @Suite.SuiteClasses 进行注解。

    package cn.nsccsz;

 

    import org.junit.runner.RunWith;

    import org.junit.runners.Suite;

    import org.junit.runners.Suite.SuiteClasses;

 

    @RunWith( Suite.class )

    @SuiteClasses( { JUnit1Test.class, StringUtilTest.class } )

    public
class JSuit {

    }

3.5. 在 Eclipse 之外执行JUnit

JUnit 提供了使用标准的Java代码形式执行测试,而不依赖于Eclipse。通常使用类

org.junit.runner.JUnitCore 类提供的静态的方法runClasses()。

下面的代码例子展示了如何使用 JUnitCode 来测试。

public
class MyTestRunner {

 

    public
static
void main(String[] args) {

        Result result = JUnitCore.runClasses(JUnit1Test.class,

                StringUtilTest.class);

 

        for (Failure failure : result.getFailures()) {

            System.out.println(failure.toString());

        }

        

        System.out.println( "执行方法个数:" + result.getRunCount() );

        System.out.println( "执行时间:" + result.getRunTime() );

    }

 

}

可以使用Ant脚本的方式或者Java命令方式,例如:

java -cp .;D:\Users\Administrator\.m2\repository\junit\junit\4.8.2\junit-4.8.2.jar cn.nsccsz.MyTestRunner

4. 安装JUnit

4.1. Eclipse集成JUnit

Eclipse允许你使用不同版本Junit进行集成。一般Eclipse已经默认集成了JUnit3.x和JUnit4.x 不同的版本

4.2. 下载Junit

可以从下面的官网下载 JUnit4.x.jar. 下载好的 junit-4.*.jar 添加到classpath.

http://junit.org/ 

5. Eclipse对JUnit的支持

5.1. 创建 JUnit 测试

  • 为当前的类创建测试类

右键单击选中的类,在Package Explorer视图中右键选中 NewJUnit Test Case.

  • 还可以使用 JUnit 想到进行创建,使用下面的方法

FileNew Other...JavaJUnit.

5.2. 运行 JUnit 测试

要运行测试类,选中包含测试方法的类。右键点击 Run-asJUnit Test,将会执行所有的测试方法。

Eclipse 提供了快捷键运行测试类,快捷键为 Alt+Shift+X,
,T。如果你光标选中了某个方法,则会只运行选中的方法。

To see the result of an JUnit test, Eclipse uses the JUnit view which shows the results of the tests. You can also select individual unit test in this view , right-click them and select Run to execute them again.

Eclipse提供了JUnit
view视图来显示测试运行的结果。在这个视图中你可以选中个别的测试类,右键选中来Run运行它们。

 

默认的情况下该视图显示所有的测试信息。你可以通过如下配置设置只显示失败的测试。

 

5.3. JUnit静态导入的设置

Eclipse 支持JUnit 的静态导入功能,使用 Ctrl+1 或者 Content Assist功能快捷键
。查看下图。

Content Assist 对静态导入的配置。

  • WindowPreferences
  • JavaEditorContent AssistFavorites

5.4. 创建JUnit 测试套件向导

To create a test suite in Eclipse you select the test classes which should be included into this in the Package Explorer view, right-click on them and select New Other...JUnitJUnit Test Suite.

在Eclipse中创建测试套件的方法

右键选中需要创建套件的包,选中 New Other...JUnitJUnit Test Suite.

5.5. 异常的测试

注解 @Test (expected = Exception.class) 限制了只能测试一个异常。可以使用下面的代码测试更多异常。

    @Test

    public
void testExceptions() {

        try {

            StringUtil.mustThrowException();

            fail();

        } catch( Exception e ) {

            // expected.

        }

        

        try {

            StringUtil.mustThrowException();

            fail();

        } catch( Exception e ) {

            // expected.

        }

    }

使用 JUnit 进行单元测试 - 教程的更多相关文章

  1. JUnit单元测试教程(翻译自Java Code Geeks)

    JUnit单元测试教程--终极指南 JUnit单元测试教程终极指南 说明 单元测试简介 1 什么是单元测试 2 测试覆盖 3 Java中的单元测试 JUnit简介 1 使用Eclipse实现简单JUn ...

  2. JUnit三分钟教程 ---- 实际应用

    JUnit三分钟教程 ---- 实际应用 摘自http://lavasoft.blog.51cto.com/62575/65775   接上文"JUnit三分钟教程 ---- 快速起步&qu ...

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

    JUnit三分钟教程 ---- 快速起步 摘自http://lavasoft.blog.51cto.com/62575/65625/ JUnit是个好东西,做大点的项目离不开这东西,实际中用的时候也因 ...

  4. java如何使用JUnit进行单元测试

    注:所有内容都是在eclipse上实现,关于eclipse的安装和jdk的安装配置,请看:http://www.cnblogs.com/fench/p/5914827.html 单元测试是什么? 百度 ...

  5. JUnit 4 单元测试

    Individual Project ——JUnit 4 单元测试 学习到JUnit单元测试,我拿来测试之前写过的一个计算器(两个依存类:Calc.java CalcFunction.java).代码 ...

  6. Android之如何使用JUnit进行单元测试

    转的:http://www.blogjava.net/qileilove/archive/2014/05/19/413824.html Android中如何使用JUnit进行单元测试 在我们日常开发a ...

  7. 使用Spring配合Junit进行单元测试的总结

    最近公司的项目和自己的项目中都用到了spring集成junit进行单元测试,总结一下几种基本的用法: 1.直接对spring中注入的bean进行测试(以DAO为例): 在测试类上添加@RunWith注 ...

  8. Spring(3)—— Junit框架单元测试

    Junit主要用于单元测试,即白盒测试.它是一个开源的由JAVA开发的一个用于测试的框架. Junit的几个基本概念:TestCase,TestSuite,TestFixtrue TestCase:代 ...

  9. JUnit + Mockito 单元测试(二)

    摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...

随机推荐

  1. Ubuntu下Vim 如何进入全屏编辑模式

    如题:F11进入全屏编辑模式,再按F11则退出全屏编辑模式.

  2. GO的MAP字典简单用法示例

    package main import "fmt" type PersonInfo struct { ID string Name string Address string } ...

  3. 64位调试器花费的时间比预期的要长(A 64-bit debugging operation is taking longer than expected)

    在stackoverflow上找到解决方案的: http://stackoverflow.com/questions/21329899/vs2013-professional-local-64-bit ...

  4. error recoder,error debug for openStack kilo

  5. 70个经典的 Shell 脚本面试问题

    转载自:http://www.imooc.com/article/1131 1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1. ...

  6. 【转】iOS 解决ipv6问题

    解决ipv6的方法有很多种,由于现在国内的网络运营商还在使用ipv4的网络环境,所以appstore应用不可能大范围去修改自己的服务器, 而且国内的云服务器几乎没有ipv6地址. 这里附上苹果开发平台 ...

  7. java 版本SQLHelper

    package com.jack.SQLHelper; import java.sql.*;import java.util.logging.*;import javax.swing.table.*; ...

  8. 【编程范式】汇编解释swap方法

    先要熟悉一些汇编的基本知识: 1.SP是什么? SP是堆栈寄存器,在调用子程序时,都会用到,保存原来程序的环境使用,如各个寄存器的内容,最重要的是,调用返回时程序的运行指令地址,这是由调用时将返回地址 ...

  9. 单片机C语言中标志位的经典应用

    /* 本例程是C语言的位域操作示例 这里为什么位域结构体与联合体一起使用? -->因为这样定义后,即可以单独使用标志位 也可同时使用整个字节数据 主要应用:单片机C语言 好处:用标志位可以节省R ...

  10. RMAN-configure命令

    在Oracle 10g中的配置情况 使用RMAN>show all; 可以显示出RMAN 配置参数为: CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # ...