E4_JUnit单元测试(1) 下载本文

内容发布更新时间 : 2024/5/18 6:05:02星期一 下面是文章的全部内容请认真阅读。

实验4:JUnit单元测试

董瑞志

常熟理工学院软件工程系

实验目的

理解手工编写单元测试的基本方法; 编写简单的基于JUnit的单元测试用例;

课时安排

2课时

实验内容

问题1:软件测试的定义及特点。

软件测试定义:软件测试时一种实际输出与预期输出间的审核或者比较的过程 软件测试的特点:软件测试的开销大

问题2:描述软件测试相关的信息流

信息流输入:

软件配置、测试配置 信息流输出:

调试、测试结果分析

JUnit初步

单元测试可以描述为“确保方法接收预期范围内的输入,并且对每个测试输入返回预期的结果。”单元测试是独立的一个工作单元(一个工作单元是一项任务,它不依赖于其他任何任务的完成)。在Java应用程序中,“独立的一个动作单元”常常指的是一个方法。 1. 编写Calculator类及其手工测试类TestCalculatorManual

图1:手工测试Calculator

单元测试的一条准则是“若程序的某项功能没有经过测试,那么该功能基本等于不存在”。这里的add方法是Calculator的核心功能之一,这里我们先手工编写测试类TestCalculatorManual。 2. 用JUnit进行单元测试

(1)JUnit有很多功能可以简化测试用例的编写和运行,我们编写Test Case—TestCalculatorWithJUnit如下。

图2:使用JUnit设计测试脚本

在Calculator类中添加subtract(), multiply(),divide()后,如何编写手工测试用例和基于JUnit框架的测试用例应该如何编写?

(2)使用默认的TestSuite, 显式调用Junit TestRunner

图3:显式调用Junit TestRunner

/*

* 调用由TestRunner自动创建的TestSuite对象

* 默认的TestSuite对象将扫描测试类,找出所有以test开头的方法, * 为每一个testXXX方法都创建一个TestCase实例。 * 要调用的方法的名称会传给TestCase的构造函数, * 这样每个实例就拥有了一个独一无二的标示。 */

public static TestSuite suite(){ return new TestSuite(TestCalculatorWithJunit.class); }

public static void main(String[] args) { //junit.textui.TestRunner.run(TestCalculatorWithJunit.class); junit.swingui.TestRunner.run(TestCalculatorWithJunit.class); }

(3)创建TestAll

缺省的TestSuite设计目的在于让测试人员可以轻松应对简单的测试情形。但是当要组合多个Suite,把它作为主Suite的一部分,特别是这些suite来自不同的包;或者要运行多个Suite、在一个Suite中选一些测试来执行……等情况下,这就需要创建自己的suite对象。 Junit Framework中,Test接口如下: public interface Test { /** * Counts the number of test cases that will be run by this test. */ public abstract int countTestCases(); /** * Runs a test and collects its result in a TestResult instance. */ public abstract void run(TestResult result); }

而TestSuite的addTest():