欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

Junit使用介绍

java water 2664℃ 0评论

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 引用了注解的方式来对方法进行测试。通常测试方法都是被包含在一个 测试类 中

使用下面的代码来创建一个单元测试 . 通过如下操作: File → New → JUnit → JUnit 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 As → JUnit 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 voidmethod() 表示该方法只执行一次,并且在所有方法之前执行。一般可以使用该方法进行数据库连接操作,注意该注解运用在静态方法。

@AfterClass 

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

@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 {

}

转载请注明:学时网 » Junit使用介绍

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!