上一篇中我们在Eclipse中用到了Junit4,我觉得对于不了解Junit的人,有必要加一章来专门说一下(其实我对Junit4也不是很了解,一边学习一边来写这篇的,不妥之处还请指正)。Junit4那么到底在哪儿用到了呢?script里哪些地方能体现出来呢?看完这一篇文章,相信你就能回答这两个问题啦。
Junit4
适用于Java的测试框架有多个,目前最流行的是Junit和TestNG.接下来我们聊一聊Junit。
JUnit test 是一个方法,它包含在一个只用于测试的类中,这样的类被称为测试类。Junit4是一个使用注解来识别测试方法的测试框架,在Junit4中我们使用注解@Test来声明一个测试。
在这个方法中,我们使用Junit或其他断言框架提供的assert方法来检查代码执行的预期结果和实际结果是否一致。
下面是我们常用的注解:
A、@Before 注解:与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行;
B、@After 注解:与junit3.x中的tearDown()方法功能一样,在每个测试方法之后执行;
C、@BeforeClass 注解:在所有方法执行之前执行;
D、@AfterClass 注解:在所有方法执行之后执行;
E、@Test 注解:测试方法
G、@Ignore 注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。
看了A-G,是不是感觉很抽象很茫然,没有关系,我们通过下面的实例来说明,会有助于你的理解。
先创建一个简单的Java类,包含计算加法,减法和乘法三个方法。Junit中-测试类名一般都是以Test结尾,测试方法名义test开头。
然后创建这个Java类对应的测试类,分别测试这三个方法。
为了清楚的看到@BeforeClass@AfterClass@Before@After@Test如何执行,我们加入一些输出log。测试类执行成功后,输出的log如下。
怎么样,上面的实例是不是验证了A-E,并且我们可以再次总结如下
@BeforeClass:在所有测试开始之前运行,只会执行一次
@AfterClass:在所有测试开始之后运行,只会执行一次
@Before:在每个测试方法之前运行,即有几个@Test就会执行几遍
@After: 在每个测试方法之后运行,即有几个@Test就会执行几遍
@Test: 需要被执行的测试方法
接下来我们将测试类中的第一个测试方法testMethodAdd() 前@Test 改为@Ignore ,然后再执行测试类,通过输出log发现被@Ignore的测试没有被执行,所以@Ignore的使用和功能一目了然了吧。
Junit test suites
如果有多个测试方法,可以将他们合并成一个测试套件(test suite),运行这个测试套件时会执行里面的所有测试方法,TestSuite还可以不断地嵌套其他的Testsuite。
在测试过程中,有时可能想一次性运行所有的测试类,或是选择性的运行某些测试类。这样的话我们就可以用TestSuite来统一管理我们的测试类。
下面举例说明,比如我们我们测试中,用户管理功能包括创建角色,创建用户,修改角色,修改用户,那么我可以将这些操作拆分成颗粒度较小的多个case,这样提高script的复用性。
我们拆分为几个case的脚本,包括login,creteUser,updateUser,createRole,updateRole,logout。具体的脚本,大家可以参考loginTest去写,就不一一列举了,这刚好是个复习练习写脚本的机会哦。
比如我们有一个测试case是要测试updateUser这个操作,那么我们就可以选择性的组合脚本顺序为login-createRole-createUser-updateUser-logout,这样一个无任何依赖的全自动的updateUser c测试case就可以执行完成了。
怎么实现这样的组合呢,它就是Test suites。
package Test
import org.junit.runners.Suite;
import org.junit.runner.*;
import junit.framework.TestSuite;
import junit.framework.Test;
@RunWith(Suite.class)
@Suite.SuiteClasses({
Login.class,
addRole.class,
addUser.class,
updateUser.class,
Logout.class
})
public class AllUserMgtTest {
public static Test suite(){
TestSuite suite=new TestSuite();
return suite;
}
}
通过上面的介绍,对于上一章中的script 的@是不是不那么迷茫了,试着自己多写几个case,去体验一下所谓的test suite吧。