JUnit4简介

标注说明:

@Before

使用了该元数据的方法在每个测试方法执行之前都要执行一次。

 

@After

使用了该元数据的方法在每个测试方法执行之后要执行一次。

 

注意@Before@After标示的方法只能各有一个。这个相当于取代了JUnit以前版本中的setUptearDown方法,当然你还可以继续叫这个名字,不过JUnit不会霸道的要求你这么做了。

 

@Test(expected=*.class)

JUnit4.0之前,对错误的测试,我们只能通过fail来产生一个错误,并在try块里面assertTruetrue)来测试。现在,通过@Test元数据中的expected属性。expected属性的值是一个异常的类型

 

@Test(timeout=xxx):

该元数据传入了一个时间(毫秒)给测试方法,如果测试方法在制定的时间之内没有运行完,则测试也失败。

@ignore

该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签传递一个String的参数,来表明为什么会忽略这个测试方法。比如:@Ignore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。

 

@BeforeClass

只在测试用例初始化时执行方法

 

@AfterClass

当所有测试执行完毕之后,执行进行收尾工作。

 

注意:每个测试类只能有一个方法被标注为@BeforeClass @AfterClass,并且该方法必须是PublicStatic的。

 

@RunWith

标注类前面,用于对后面的类指定运行器,形式@RunWith**.class),其中的参数为一个类名,表述指定的运行器,这个运行器可以是Junit框架中的运行器,也可以是用户自定义的。

 

打包测试:

@RunWith标注传递一个参数Suite.class注解告诉JUnit它使用org.junit.runner.Suite。这个运行机允许你手工地构建一个包含测试(可能来自许多类)的测试集。这些类的名称都被定义在@Suite.SuiteClass中。

 

@Suite.SuiteClasses

来表明这个类是一个打包测试类。我们把需要打包的类作为参数传递给该标注就可以了。

有了这两个标注之后,就已经完整的表达了所有的含义,因此下面的类已经无关紧要,随便起一个类名,内容全部为空既可。

 

Junit中的失败情况:

JUnit 将测试失败的情况分为两种:failure和error。Failure 一般由单元测试使用的断言方法判断失败引起,它表示在测试点发现了问题;而error则是由代码异常引起,这是测试目的之外的发现,它可能产生于测试代码本身的错误(测试代码也是代码,同样无法保证完全没有缺陷),也可能是被测试代码中的一个隐藏的bug。

 

 参数化测试(Parameters):

当一个测试类使用参数化运行器运行时,需要在类的声明处加上@RunWithParameterized.calss)注释,来制定参数化运行器来运行;在参数化运行类中,提供参数的方法要用@Parameters注释来修饰,同时在测试类构造方法中为各个参数赋值(构造方法是由Junit来调用),最后编写测试方法,执行是会根据参数组数来运行测试多次。

 实例:数字运算小程序MathDemo

MathDemo.java

package MathDemo;
public class MathDemo {
	public int add(int a, int b) {
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {

			e.printStackTrace();
		}
		return a + b;
	}

	public int div(int a, int b) {

		if (b == 0)
			throw new ArithmeticException("除数不能为零");

		return a / b;
	}
}

MathDemoTest.java

package MathDemo;

import static org.junit.Assert.*;

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 MathDemoTest4 {
	MathDemo demo;

	@BeforeClass
	public static void setupBeforeClass() throws Exception {
		System.out.println("beforeclass...........");
	}

	@Before
	public void setUp() throws Exception {
		demo = new MathDemo();
		System.out.println("setup...........");
	}

	@After
	public void tearDown() throws Exception {
		System.out.println("teatdown...........");
	}

	@AfterClass
	public static void testAddAfterClass() throws Exception {
		System.out.println("afterclass.........");
	}

	@Test(timeout =500)
	public void testAdd() {
		System.out.println("test.............");
		int a = 4, b = 2;
		int expected = 6, actual;
		actual = demo.add(a, b);
		assertEquals(expected, actual);
	}

	@Ignore("该方法还没有实现")
	public void testDiv() {
		int a = 4, b = 2;
		int expected = 6, actual;
		actual = demo.add(a, b);
		assertEquals(expected, actual);
	}

	@Test(expected = ArithmeticException.class)
	public void testDiv1() {
		int a = 4, b = 0;
		int expected = 4, actual;
		actual = demo.div(a, b);
		assertEquals(expected, actual);
	}
结果:
beforeclass...........
setup...........
test.............
teatdown...........
setup...........
teatdown...........
afterclass.........


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值