JUnit4

JUnit4单元测试实战


1、先看实例:

 

T.java 被测试类

package com.bjsxt.junit;

public class T {

    public int add(int a,int b){
        return a+b;
    }
   
    public int devide(int x,int y){
        return x/y;
    }
}

 

 

 

 

 

TTest.java  测试类

package com.bjsxt.junit.test;

import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;

import com.bjsxt.junit.T;

public class TTest {
   
    /**
     * @BeforeClass在TTest测试类初始化之前就执行,所以static
     */
    @BeforeClass
    public static void beforeClass(){
        System.out.println("beforeClass");
    }
   
   
    /**
     * @AfterClass也是static
     */
    @AfterClass
    public static void afertClass(){
        System.out.println("afterClass");
    }
   
   
    /**
     * 每个测试方法执行之前都执行
     */
    @Before
    public void before(){
        System.out.println("before");
    }
   
   
    /**
     * 每个测试方法执行之后都执行
     */
    @After
    public void after(){
        System.out.println("after");
    }
   
   
    /**
     * @Test表示测试方法
     */
    @Test
    public void testAdd() {
        int z = new T().add(5, 3);
        assertThat(z, is(8));
    }

   
    /**
     * @Ignore表示忽略本测试方法
     */
    @Ignore
    @Test(expected=java.lang.ArithmeticException.class,timeout=100)
    //expected表示抛出异常,timeout表示在多少毫米之内执行完本测试方法
    public void testDevide() {
        int z = new T().devide(8, 0);
        assertThat(z, is(4));
    }
}

 

 

 

2、笔记

 

什么是单元测试

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

写了个类,要给别人用,会不会有 Bug ?怎么办?测试一下

main 方法测试好不好?不好

1、 不能一起运行

2、 太多数情况下需要人为的观察输出确定是否正确

为什么要进行单元测试

重用测试 ,应付将来实现的变化

提高士气,明确知道我的东西是没有问题的

Jdk5 中可以直接引入静态方法如: import static org.junit.Assert.*; 在类中直接使用方法,而非   . 方法的方式调用 import org.junit.Assert

Keeps the bar green to keeps the code clean

Junit4 HelloWorld

1、 new Project( 引入 junit )

2、 建立类

3、 建立 testcase

放弃旧的断言,使用 hamcrest 断言

下载 hamcrest ,引入 hamcrest-core 包, hamcrest-library

其中表达式位于 org.hamcrest.Matchers

1、 使用 assertThat manual machers );

2、 实例

a)   assertThat(n, allOf(greaterThan(1),lessThan(15)));

assertThat(n, anyOf(greaterThan(16),lessThan(15)));

assertThat(n , anything());

assertThat(str, is(“eagle”));

assertThat(str, not(“eagle”));

       b)  assertThat(str, containsString(“eagle”));

       assertThat(str, endsWith(“eagle”));

assertThat(str, startsWith(“eagle”));

assertThat(str, equalTo(“eagle”));

assertThat(str, equalToIgnoringCase(“eagle”));

assertThat(str, equalToIgnoringWhiteSpace(“eagle”));

       c)    assertThat(d,closeTo(3.0,0.3))

              assertThat(d,greaterThan(3.0))

assertThat(d,lessThan(3.0))

assertThat(d,greaterThanOrEqualTo(3.0))

assertThat(d,lessThanOrEqualTo(3.0))

d)  assertThat ( map, hasEntry(“eagle”,”eagle”))

       assertThat ( iterable, hasItem(“eagle”))

              assertThat ( map, hasKey(“eagle”))

assertThat ( map, hasValue(“eagle”))

 

·         Fai 核心

anything - 总是匹配, 如果你不关心测试下的对象是什么是有用的

describedAs - 添加一个定制的失败表述装饰器

is - 改进可读性装饰器 - 见下 “Sugar”

·         逻辑

allOf - 如果所有匹配器都匹配才匹配, short circuits ( 很难懂的一个词, 意译是短路, 感觉不对, 就没有翻译)( Java &&)

anyOf - 如果任何匹配器匹配就匹配, short circuits ( Java ||)

not - 如果包装的匹配器不匹配器时匹配, 反之亦然

·         对象

equalTo - 测试对象相等使用Object.equals 方法

hasToString - 测试Object.toString 方法

instanceOf, isCompatibleType - 测试类型

notNullValue, nullValue - 测试null

sameInstance - 测试对象实例

·         Beans

hasProperty - 测试JavaBeans 属性

·         集合

array - 测试一个数组元素test an array’s elements against an array of matchers

hasEntry, hasKey, hasValue - 测试一个Map 包含一个实体, 键或者值

hasItem, hasItems - 测试一个集合包含一个元素

hasItemInArray - 测试一个数组包含一个元素

·         数字

closeTo - 测试浮点值接近给定的值

greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - 测试次序

·         文本

equalToIgnoringCase - 测试字符串相等忽略大小写

equalToIgnoringWhiteSpace - 测试字符串忽略空白

containsString, endsWith, startsWith - 测试字符串匹配

Failure Error

1、 Failuer 是指测试失败,测试对象有错

2、 Error 使指测试程序本身出错

 

JUnit4 Annotation

import static org.hamcrest.Matchers.*; hamcrest-library 包中

1 @Test 测试方法    说明下面的方法未测试方法

       a )( expected =XXException.class )源程序中有异常抛出

       b)  (timeout=xxx)   希望程序在 timeout 设定的时间内执行完成

@Test (expected=java.lang.ArithmeticException. class ,timeout=1)

2 @Ignore 被忽略的测试方法

3 @Before 每一个测试方法之前运行(例如:打开文件)

4 @After 每一个测试方法之后运行(例如:关闭文件)

5 @BeforeClass 所有测试开始之前运行 (方法必须为静态方法,类初始化之前运行,建立跟数据库的链接,加载 spring 文件等)类运行之前需要取得耗费时间的资源时

6 @AfterClas 所有测试方法结束之后运行(方法必须为静态方法,关闭数据库连接)

运行多个测试

Test Driven Development 测试驱动开发 (TDD)

右击测试包或项目, run as---Open Run Dialog— 选中 Run all tests in the selected project,package,or source folder  选择运行测试文件所在项目,包或文件夹

注意:

1、 遵守约定,比如

a)  类放在 test 包中

b) 类名用 XXXTest 结尾

c)  方法用 testMethod 命名

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值