JUNIT学习研究

今天小白来和大家一起学习JUNIT单元测试工具,因为工作需要,所以抽空总结了一下学习过的知识,小白在这里把这些分享给大家,有不妥善之处望大神多多指点哦~

本文用到的JUNIT版本为Junit 4.8.

第一部分 JUNIT简介

Junit是用于编写和运行可重复的自动化测试的开源测试框架,准确的说是回归测试框架,测试已有的代码程序是否按照预期工作。Junit广泛用于工业和作为支架(命令行),或者IDE(Eclipse)内单独的JAVA程序.

第二部分   JUNIT特性

1 断言测试预期结果

2 测试功能可共享通用的测试数据

3 测试套件轻松地组织和运行测试

4 图形和文本测试运行

第三部分  JUNIT注释示例

@Test  注释测试用例

@Before 注释表示该方法必须在每个@Test执行之前运行,以便执行测试必要的先决条件

@BeforeClass 注释指出这是附着在静态方法必须执行一次并且在类的所有测试之前,发生这种情况时一般在测试计算共享配置方法(如连接到数据库)

@After 注释指示在每个@Test之后执行(如执行每一个@Test之后重置某些变量,删除临时变量等)

@AfterClass 注释指出这是附着在静态方法必须执行一次并且在类的所有测试之后,用来清理建立方法,(如数据库断开连接)

@Ignore 注释忽略当想暂时禁用特定的测试执行,每个被注解为@Ignore的方法将不被执行

第四部分 JUNIT断言

void assertEquals([String message], expected value, actual value),断言两个值相等。值可能是类型有 int, short, long, byte, char or java.lang.Object. 第一个参数是一个可选的字符串消息

void assertTrue([String message], boolean condition)断言一个条件为真
void assertFalse([String message],boolean condition)断言一个条件为假
void assertNotNull([String message], java.lang.Object object)断言一个对象不为空(null)
void assertNull([String message], java.lang.Object object)断言一个对象为空(null)
void assertSame([String message], java.lang.Object expected, java.lang.Object actual)断言,两个对象引用相同的对象
void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual)断言,两个对象不是引用同一个对象
void assertArrayEquals([String message], expectedArray, resultArray)断言预期数组和结果数组相等。数组的类型可能是 int, long, short, char, byte or java.lang.Object.

第五部分 创建测试套件

@RunWith是测试运行器,放在测试类名之前,用来确定测试类怎么运行的,当不指定这个注解时,使用默认的Runner来运行测试代码,即@RunWith(JUnit4.class).

常见的运行器包含以下。

(1) @RunWith(Parameterized.class):参数化运行器,配合@Parameters使用JUnit的参数化功能。(2)@RunWith(Suite.class)@SuiteClasses({ATest.class,BTest.class,CTest.class})测试集运行器配合使用测试集功能。 

(3)@RunWith(JUnit4.class):JUnit 4的默认运行器  

(4)@RunWith(JUnit38ClassRunner.class):用于兼容junit3.8的运行器

(5)一些其它运行器具备更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了Spring的一些功能。

例如当一个类被注解为@RunWith JUnit 将调用被在其中注解,以便运行测试类,而不使用内置的 JUnit 运行方法。
@RunWith(Suite.class)
@Suite.SuiteClasses({ PrepareMyBagTest.class, AddPencilsTest.class })

注解@Suite.SuiteClasses,来表明这个类是一个打包测试类

第六部分 创建参数化测试

@Parameters:用于JUnit的参数化功能,用来标记准备数据的方法,该方法需要满足一定的要求,(1)该方法必须为public static的,(2)该方法返回值必须为java.util.Collection类型,(3)该方法的名字不做要求,(4)该方法没有参数 

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

第七部分 异常测试

@Test 注解中的expected属性来测试异常。expected属性的值是一个异常的类型。

@Test(expected=ArithmeticException.class)
public void testDivide() { new Calculator().divide(6, 0);}

第八部分 限时测试

对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。限时测试是一个很好的解决方案。我们给这些测试方法设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该方法结束的原因是因为超时,这样你就可以发现这些Bug了。要实现这一功能,只需要给@Test 注解加一个timeout属性,该注解传入了一个时间(毫秒)给测试方法,如果测试方法在指定的时间之内没有运行完,则测试失败。

@Test(timeout=1000)
public void testDeathLoop() { new Calculator().deathLoop();}

第九部分 "规则"新功能

@Rule注解被使用来标出测试类的公共字段。这些字段类型为MethodRule,这是测试方法如何运行并报告。多个MethodRules可以应用到一个测试方法。MethodRule接口有很多的实现,如ErrorCollector在发现了第一个问题之后,也允许继续执行一个测试,ExpectedException 允许在测试规范预期的异常类型和消息,TestName 使得目前的测试名称在测试方法内部可用,以及其他许多。除了那些已经定义的规则,开发人员可以创建自己的自定义规则,并使用来测试自己用例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值