E4_JUnit单元测试(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验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():
public void addTest(Test test) {
fTests.addElement(test);
}
即可以为TestSuite添加TestSuite也可以添加TestCase,这就为创建特殊的suite或者组合出TestAll创造了方便。
通常情况下,TestAll仅仅包括一个静态的suite(),该方法会注册应用程序需要定期执行的所有Test对象(包括TestCase和TestSuite)。TestAll的suite()方法细节如下:public static Test suite(){
TestSuite suite=new TestSuite("All tests will be executed");
suite.addTestSuite(TestCalculatorWithJunit.class);
return suite;
}
JUnit单元测试的步骤
1.Junit三重唱
当你需要编写更多的TestCase的时候,你可以创建更多的TestCase对象。当你需要一次执行多个TestCase对象的时候,您可以创建一个TestSuite对象或使用缺省的TestSuite对象进行封装。为了执行TestSuite,需要使用TestRunner。通过TestRunner的执行生成TestResult 对象。(如图5所示)
图5:JUnit成员三重唱,共同产生测试结果
(1)TestCase测试用例
用户定义的TestCase必须扩展junit.framework.TestCase类,它以testXXX方法的形式包含了一个或多个测试。一个测试用例把具有公共行为的测试归入一组。
(2)TestSuite测试套装
一个测试套装可以把多个测试用例或测试套装封装为一组
(3)TestRunner测试运行器
测试运行器用来运行测试套装,Junit提供良种典型的测试运行器:
junit.swingui.TestRunner 和junit.textui.TestRunner
2.JUnit核心类
JUnit核心类及其简介如下表所示:
表1:JUnit核心类