软件测试基础教程(中南林业科技大学涉外学院) - 图文

发布时间 : 星期六 文章软件测试基础教程(中南林业科技大学涉外学院) - 图文更新完毕开始阅读

@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() {

联系合同范文客服:xxxxx#qq.com(#替换为@)