Junit 4 学习笔记

JUnit4.x利用了java5的特性(注释Annotation)的优势,比3.x使用起来更加方便简单,它不是简单的旧版本升级,它是一个全新的框架,整个框架的报结构已经彻底改变,但4.x版本任然能够很好的兼容旧版本的测试套件。

利用JUnit4.x的注解方式测试

import static org.junit.Assert.*;
import hb.util.Calculator;

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

public class TTest {

	private Calculator calculator = new Calculator();
	
	//在所有方法运行之前运行
	@BeforeClass
	public static void beforeClass(){
		System.out.println("-----------beforeClass");
	}
	
	//在所有方法运行之后运行
	@AfterClass
	public static void afterClass(){
		System.out.println("---------afterClass");
	}
	
	//每个测试方法运行之前运行
	@Before
	public void before(){
		System.out.println("==============before");
	}
	
	//每个测试方法运行之后运行
	@After
	public void after(){
		System.out.println("===========after");
	}
	
	@Test
	public void testAdd(){
		int result = calculator.add(3, 6);
		assertEquals(9,result);
		System.out.println("testAdd() is OK");
	}
	
	@Test
	public void testDivision(){
		System.out.println("in test division");
	}
	
	@Ignore  //表示这个方法是不被运行的
	@Test
	(expected=java.lang.ArithmeticException.class,timeout=100) //timeout表示要求方法在100毫秒内运行完成,否则报错
    public void testDivide(){
        int z = calculator.subtration(8,2);
    }
}

 

运行结果:

-----------beforeClass
==============before
testAdd() is OK
===========after
==============before
in test division
===========after
---------afterClass

结论:@BeforeClass --> @Before --> @Test --> @After --> @AfterClass

1、@Ignore:忽略的测试方法,标注的含义——某些方法尚未完成,暂不参与此次测试

2、@BeforeClass:针对所有测试,在所有测试方法执行前执行一次,且必须为public static void

3、@AfterClass:针对所有测试,在所有测试方法执行结束后执行一次,并且必须为public static void

JAVA5新添加的新特性,可以使用import进来某个Class的静态members,主要有两种表现形式:

1、引进某个特定的静态成员

import static packageName.ClassName.staticMemberName;

2、引进所有的静态成员

import static packageName.ClassName.*;

批量处理的学习?

方法引入一种“测试套件”的概念,JUnit提供了一种批量运行测试类的方法,叫做测试套件。

测试套件的写法需要遵循一下原则:

1、创建一个空类作为测试套件的入口,

2、使用注解org.junit.runner.RunWith和org.junit.runners.Suite.SuitClasses修饰这个空类

3、将org.junit.runners.Suite作为参数传入给注解RunWith,以提示JUnit为此类测试使用套件运行器执行

4、将需要放入此测试套件的测试类组成数组作为注解SuiteClasses的参数

5、保证这个空类使用public修饰,而且存在公开的不带任何参数的构造函数

//该类是用来测试User类这个方法的

import static org.junit.Assert.*;
import hb.util.User;
import org.junit.Test;

public class TestUser {
	@Test
	public void testGetName(){
		assertEquals("黄彪", new User().getName());
	}
}

//该测试类是用来测试类T这个方法的
import hb.util.T;
import static org.junit.Assert.*;
import org.junit.Test;

public class TTest {

	@Test
	public void testAdd(){
		int result = new T().add(5, 3);
		assertEquals(8,result);
	}
}

//将TestUser、TTest这个两个测试类一并处理
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)  //告知JUnit此类测试使用套件运算至星器
@SuiteClasses({TestUser.class,TTest.class})//需要测试的类的方法
public class AllTest {
}

 

代码规范?

1、单元测试的代码应位于单独的Source Folder下,即与src同一级别

2、测试类应该与被测试类位于统一package,即src和自己建立的测试folder目录相同

3、选择有测试意义的测试方法名,单元测试方法名均需使用test<待测试方法名>[概要描述],例如public void testDivdeDivisorZero(),这样很容易知道测试方法的含义

4、保持测试的独立性

5、为暂时未实现的测试代码抛出失败(fail)或者是忽略(ignore),例如使用fail("not yet implemented")或是@Ignore("not yet implemented")

6、在调用断言(assert)方法时给出失败的原因

猜你喜欢

转载自hbiao68.iteye.com/blog/2177401