29 Junit4

JUnit 4 全面引入了Annotation 来执行我们编写的测试。
1.JUnit 4 并不要求测试类继承TestCase 父类。
2.在一个测试类中,所有被@Test 注解所修饰的public,void 方法都是test case,
可以被JUnit 所执行。
3.虽然JUnit 4 并不要求测试方法名以test 开头,但我们最好还是按照JUnit 3.8
的要求那样,以test 作为测试方法名的开头。
4.在JUnit 4 中,通过@Before 注解实现与JUnit 3.8 中的setUp 方法同样的功能,

通过@After 注解实现与JUnit 3.8 中的tearDown 方法同样的功能。

public class CaculateTest 
{
	private Caculate cal;
	
	@Before
	public  void init()
	{
		cal=new Caculate();
	}
	
	@Test
	public void testAdd()
	{
		cal=new Caculate();
		int result=cal.add(1,2);
		Assert.assertEquals(3,result);
	}
	
	@After
	public void destory()
	{
		
	}

}

5.在JUnit 4 中,可以使用@BeforeClass 与@AfterClass 注解修饰一个publicstatic

void no-arg 的方法

这样被@BeforeClass 注解所修饰的方法会在所有测试方法执行前执行

被@AfterClass 注解所修饰的方法会在所有测试方法执行之后执行

这种方法通常执行比较耗时的,并且与测试无关的方法,类似连接数据库


@BeforeClass
	public static void globalInit()
	{
		System.out.println("globalInit invoked!");
	}
	
	@AfterClass
	public static void globalDestroy()
	{
		System.out.println("globalDestroy invoked!");
	}
	
timeout 测试超时


@Test(timeout = 1400)
	public void testAdd()
	{
		cal=new Caculate();
		int result=cal.add(1,2);
		Assert.assertEquals(3,result);
	}


expected 测试异常

@Test (expected =Exception.class)
	public void testdivid() throws Exception
	{
		cal=new Caculate();
		cal.divide(1,0);
	}
	


6.@Ignore 注解可用于修饰测试类与测试方法,当修饰测试类时,表示忽略掉

类中的所有测试方法;当修饰测试方法时,表示忽略掉该测试方法。

@Test(expected = Exception.class)
	//@Ignore("not ready yet")
	public void testGetLargest3() throws Exception
	{
		largest.getLargest(new int[]{});
	}
	


10. 参数化测试(Parameters):当一个测试类使用参数化运行器运行时,

需要在类的声明处加上@RunWith(Parameterized.class)注解,表示该类将不使用JUnit

内建的运行器运行,而使用参数化运行器运行;

在参数化运行类中提供参数的方法上要使用@Parameters 注解来修饰,同时在测试类的构造方法中为各个参数赋值(构造方法是由JUnit 调用的),最后编写测试类,它会根据参数的组数来运行测试多次。

@RunWith(Parameterized.class)
public class ParametersTest
{
	private int expected;
	private int input1;
	private int input2;
	
	@Parameters
	public static Collection parameterData()
	{
		Object [][] objects={{3,1,2},{2,1,1},{4,3,1}};
		
		return Arrays.asList(objects);
	}
	public ParametersTest(int expected,int input1,int input2)
	{
		this .expected=expected;
		this.input1=input1;
		this .input2=input2;
		
	}
	
	@Test
	public void testAdd()
	{
		Caculate caculate=new Caculate();
	Assert.assertEquals(this.expected,caculate.add(this .input1,this .input2
			));	
	}
}

11. 在JUnit 4 中, 如果想要同时运行多个测试, 需要使用两个注解:
@RunWith(Suite.class)以及@Suite.SuiteClasses(),通过这两个注解分别指定使
用Suite 运行器来运行测试, 以及指定了运行哪些测试类, 其中的
@SuiteClasses 中可以继续指定Suite,这样JUnit 会再去寻找里面的测试类,

一直找到能够执行的Test Case 并执行之。


12. JUnit 在TestCase 类中应用了模板方法模式:
13. JUnit在TestCase类中应用了适配器(Adapter)模式:
在runBare方法中,通过runTest方法将我们自己编写的testXXX方法进行了适配,使得JUnit可以执行我们自己编写的Test Case,runTest方法的实现如下:

在runTest方法中,首先获得我们自己编写的testXXX方法所对应的Method对象(不带参数),然后检查该Method对象所对应的方法是否是public的,如果是则调用Method对象的invoke方法来去执行我们自己编写的testXXX方法。


14JUnit中要区分错误(error)与失败(failure)
1) 错误指的是代码中抛出了异常等影响代码正常执行的情况,比如抛出了ArrayIndexOutOfBoundsException,这就叫做错误。
2) 失败指的是我们断言所期待的结果与程序实际执行的结果不一致,或者是直接调用了fail()方法,这叫做失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值