@Test注解的expected参数,异常测试,用于测试是否会抛出指定的异常,若抛出则为成功,反之为失败。请在BookTest中新增一个测试用例: @Test(expected = ArithmeticException.class) public void caseException() { int n = 2 / 0; }
这个测试用例是以0为除数,运行效果如下:
成功!因为指定的ArithmeticException异常被抛出了。
@Test注解的timeout参数,限时测试,用于限定测试用例耗费的时间,单位毫秒,如果测试用例没有在限定时间内完成则为失败,否则以测试用例的执行结果为准。请在BookTest中新增一个测试用例:
@Test(timeout=1000) public void caseWhile() { for (;;) { }
}
这是一个死循环,1秒之后将被强制停止,运行效果如下:
由于超时,运行失败。
@Parameters注解,参数化测试,用于对同一测试用例测试一组数据。请新建一个“JUnit测试用例”BookTest2,修改代码如下:
package net.test.unit.junit;
import static org.junit.Assert.assertEquals;
import java.util.Arrays; import java.util.Collection;
import org.junit.After; import org.junit.Before; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class) public class BookTest2 {
private String expectedId; private String targetId; private String expectedName; private String targetName;
Book book = null;
@Parameters
public static Collection Result() { return Arrays.asList(new Object[][] { { \, \, \, \ }, { \, \, \, \ } }); }
public BookTest2(String expectedId, String targetId, String expectedName, String targetName) { this.expectedId = expectedId;
this.targetId = targetId; this.expectedName = expectedName; this.targetName = targetName; }
@Before
public void setUp() throws Exception { System.out.println(\测试开始!\); book = new Book();
System.out.println(\对象被初始化!\); }
@After
public void tearDown() throws Exception { System.out.println(\对象将被清理!\); book = null;
System.out.println(\测试结束!\); }
@Test
public void caseId() {
book.setId(targetId); //设置id属性的值 //使用Assert查看id属性的值
assertEquals(expectedId, book.getId()); System.out.println(\属性被测试!\); }
@Test
public void caseNames() {
book.setName(targetName); //设置name属性的值 //使用Assert查看name属性的值
assertEquals(expectedName, book.getName()); System.out.println(\属性被测试!\); }
}
这个例子其实就是BookTest的扩展版,但在原基础上有几点变化:
首先是文件头部增加了一行代码:@RunWith(Parameterized.class),用来调用BookTest2类运行;
其次是定义了一个用@Parameters注解的Result静态方法,该方法用来存放测试数据,本例存放了2组数据,每组4个;
再次是定义了一个带参数的构造函数,其参数个数与每组测试数据的个数相等;
最后是定义了expectedId等4个成员变量,用来传递测试数据到测试用例中。
下面执行BookTest2,运行效果如下:
测试用例运行了两遍,第一遍由于期待值和设定值不相等而失败,第二遍则运行成功。
junit.framework.JUnit4TestAdapter类。依赖于Java 5.0新特性,开发测试用例无需继承junit.framework.TestCase的JUnit 4.1已经推出一段时间了,但有些自带JUnit测试环境的IDE,例如NetBeans 5.5甚至旧版Eclipse仍只支持JUnit 3,无法正确运行基于JUnit 4.1环境开发的测试用例,因此要解决这个问题,需要借助于junit.framework.JUnit4TestAdapter类。新建类TestSuite,修改代码如下:
package net.test.unit.junit;
public class TestSuite {
public staticvoid main(String[] args) {
junit.textui.TestRunner.run(TestSuite.suite()); }
public static junit.framework.Test suite() {
相关推荐: