您的位置:首页 > 其它

Junit

2014-03-04 11:12 204 查看

注释@Test, @Before, @After, @BeforeClass, @AfterClass

Junit 4 不用继承TestCase类,要测试的方法也不用命名为testxxx(),而是以@Test注解来指定测试方法。如果Junit 4使用继承,那么@注解会失效。不集成TestCase类,要使用assertEquals方法得引入 import static org.junit.Assert.assertEquals;

Junit 3 用setup(), testxxx(), tearDown(). Junit 4 用在方法上一行加注释 @Before, @Test, @After.

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

@BeforeClass @AfterClass 在一个类中只执行一次,一个类里只有一个方法。public static void classSetup()

@Before @After 在每个测试方法之前或之后都执行一次,可以有多个方法加此标签,执行顺序不确定。public void methodSetup()

当一个类里有多个测试方法,在所有测试方法之前需要setup的环境可以用BeforeClass,如果只有一个测试方法,那么@Before也可以。

@Ignore 用于暂时忽略某个测试方法, 加在原有的@Test的上一行。

Junit 测试用例设计方法

如果一个类里有多个方法要测,比如各种条件下被测试方法能否正确处理,每个条件可以写一个test 方法,这些test方法都放在一个test类里。 执行后,看哪个方法执行失败。

Junit 的测试结果有3种:成功,失败(failure),错误(error). 成功和失败是assertxxx()方法执行的结果,错误error则是代码异常引起的。

Junit TestSuite

批量执行测试用例

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

2. 使用@RunWith和@SuiteClasses修饰这个空类。

3. Suite.class作为RunWith的参数,提示Junit用测试套件运行器来执行此类。

4. 要测试的类逗号隔开作为SuiteClasses的参数,也可以将其他的suite作为参数。

5. 这个空类用public修饰,而且存在公开的不带有任何参数的构造函数。

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@SuiteClasses({Package.test1.class, Package.test2.class, gui.TestesTodos.class})
public class TodosOsTests(){}


在自己的类中批量执行Junit

如果测试用例太多,写在SuiteClasses里面也不方便,而且如果要加一些额外的逻辑和代码,比如log,report,不同模式(ut,longrun)之类的,单用suite就不能满足了。

Junit4提供了JunitCore类,可以灵活地调用测试用例。

1. 建一个case.txt, 里面每一行是一个要执行的ut test case,如下所示:

com.ibm.docs.integration.ut.cases.AAAATest

com.ibm.docs.integration.ut.cases.CCCCTest

com.ibm.docs.integration.ut.cases.XXXXTest

2. 调用

2.1 先用ClassName.class.getClassLoader().getResourceAsStream(“cases.txt“)来取得case文件内容到InputStream.

      注:InputStream是一个一个字节地读,BufferStream是一行一行地读。

2.2 然后将InputStream转成BufferStream,然后一行一行读内容,将case名字转成List对象。

2.3 然后循环List对象,用JunitCore的run方法执行每个case。

InputStream fileStream = PackageUtil.class.getClassLoader().getResourceAsStream("cases.txt");
try
{
List<String> classList = new ArrayList<String>();
BufferedReader br = new BufferedReader(new InputStreamReader(fileStream));
String testcase = "";
while ((testcase = br.readLine()) != null)
{
if (packagename == "" || testcase.contains(packagename))
classList.add(testcase);
}
return classList;
}
catch (IOException e)
{
e.printStackTrace();
}
return Collections.EMPTY_LIST;

for (String clazzname : clazzes)
{
Class<?> clazz = Class.forName(clazzname);
JUnitCore core = new JUnitCore();
RunListener listener = new Listener(cases, reportFile);
core.addListener(listener);
Result result = core.run(clazz);
}


异常处理

当程序抛出异常是期望的结果时,Junit4 可以用@Test (expected = xxxException.class) 实现。

例如,如下代码片段的测试场景是在用户logout之后,再publish会报错。

@Test (expected = NullPointerException.class)
public void testSessionTimeOut() {
......
scene.login(name, password);
scene.logout();
scene.publish(fileId);
......
}

References:

http://www.ibm.com/developerworks/cn/java/j-lo-junit4/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: