JUnit4学习

单元测试不是用来证明您是对的,而是为了证明您没有错。

单元测试的范围要全面,比如对边界值、正常值、错位值的测试


eclipse全面支持JUnit,并从版本3.2开始支持JUnit4


JUnit4.1是基于Java5的升级版本,所以JDK1.4不支持JUnit4


单元测试代码和被测试代码应该放在不同的src目录下(例如src和testsrc),但要保证使用相同的包名,这样既保证了测试代码和被测试代码的分离,又

便于查找

对于JUnit4来说:
1.测试类不用继承任何框架类(只需引入JUnit4相关包即可);
2.测试方法必须使用注解@Test;
3.测试方法必须使用public void修改,而且不能带任何参数;
4.测试方法名可以任意取;
例如:
package com.cxm.juintt;

import static org.junit.Assert.*;

import org.junit.Test;

public class HelloWorldTest {

@Test
public void tsS() {
HelloWorld he=new HelloWorld();
int a=he.str(3, 1);
assertEquals(2, a);
}

}


在Eclipse中建立测试方法很简单,只需要右击选择new->JUnit4即可创建该类的测试类

JUnit将测试失败的情况分为两种:failure和error。Failure一般由断言方法判断引起;error则是有代码异常引起




Fixture:它是指在执行一个或多个测试方法是需要首先创建的一系列公共资源或者数据

使用他们也能简单:
1.初始化方法必须使用注解@Before,方法名可以随便取,最好取init;
2.测试方法必须使用public void修饰,而且不能带任何参数;
3.注销方法必须使用注解@After,方法名最好取destroy;

注意:每个测试方法被调用前后,都要调用一次Fixture方法

如果Fixture方法能耗费时间,可以考虑类级别的Fixture方法
使用他们也能简单:
1.初始化方法必须使用注解@BeforeClass,方法名可以随便取,最好取init;
2.测试方法必须使用public static void修改,而且不能带任何参数;
3.注销方法必须使用注解@AfterClass,方法名最好取destroy;

这样的话,Fixture方法只调用一次



注解@Test有一个参数timeout,指定被测试方法被允许运行的最长时间是多少,单位为毫秒。如果被测试方法运行的时间超过了设定的时间,JUnit就认为

失败,这个参数可以用于性能测试。例如:
@Test(timeout=1)
public void tsS() {
HelloWorld he=new HelloWorld();
int a=he.str(3, 1);
assertEquals(2, a);
}

忽略测试方法,可以使用注解Ignore,例如下面代码,运行测试类时,就不执行这个测试方法


@Ignore  // 无论下到Test上面还是下面都会忽略的
@Test
public void tsS() {
HelloWorld he=new HelloWorld();
int a=he.str(3, 3);
assertEquals(2, a);
}



JUnit提供了一种批量运行测试类的方法,叫做测试套件。
其使用方法是首先新建一个public空类,而且该类存在公开的不带任何参数的构造方法,例如:
package com.cxm.juintt;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)// 指定JUnit的运行器为Suite
@Suite.SuiteClasses({HelloWorldTest.class,HelloWorldTest2.class})// 各个测试类用逗号分隔
public class SuiteTest {

}

参数化测试方法如下:
1,为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized
2,为测试类声明几个变量,分别用于存放期望值和测试所用数据。
3,为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
4,为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
5,编写测试方法,使用定义的变量作为参数进行测试。

例如:
package com.cxm.juintt;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class HelloWorldTest2 {

private int e1;
private int e2;
private int r;


@Parameters
public static Collection ssef(){

return Arrays.asList(new Integer[][]{
{3,1,2},{5,0,5},{6,6,0},{9,9,0},{10,5,5},{3,2,1}
});
}

public HelloWorldTest2(int e1,int e2,int r){
this.e1=e1;
this.e2=e2;
this.r=r;
}

@Test
public void testAdd() {
HelloWorld he=new HelloWorld();
assertEquals(r, he.str(e1, e2));
}

}

你可能感兴趣的:(JUnit4)