收藏 分享(赏)

JUnit测试框架使用介绍.doc

上传人:精品资料 文档编号:10144440 上传时间:2019-10-14 格式:DOC 页数:13 大小:37.19KB
下载 相关 举报
JUnit测试框架使用介绍.doc_第1页
第1页 / 共13页
JUnit测试框架使用介绍.doc_第2页
第2页 / 共13页
JUnit测试框架使用介绍.doc_第3页
第3页 / 共13页
JUnit测试框架使用介绍.doc_第4页
第4页 / 共13页
JUnit测试框架使用介绍.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit 测试是程序员测试,即白盒测试。JUnit 测试骨架使用 JUnit 时,主要都是通过继承 TestCase 类别来撰写测试用例,使用testXXX()名称来撰写单元测试。用 JUnit 写测试真正所需要的就三件事:1 一个 import 语句引入所有 junit.framework.*下的类。2 一个 extends 语句让你的类从 TestCase 继承。3 一个调用 super(string)的构造函数。功能类 MathToolp

2、ackage com.zj.c01;public class MathTool public static int gcd(int num1, int num2) int r = 0;while (num2 != 0) r = num1 % num2;num1 = num2;num2 = r;return num1;测试类 MathToolTestpackage com.zj.c01;import junit.framework.TestCase;public class MathToolTest extends TestCase public MathToolTest(String name

3、) super(name);public void testGcd() assertEquals(5, MathTool.gcd(10, 5);使用 Eclipse-Run As JUnit Test在运行 TestRunner 执行测试时,你会发现到有 Failure 与 Error 两种测试尚未通过的信息。Failure 指的是预期的结果与实际运行单元的结果不同所导致,例如当使用assertEquals()或其它 assertXXX()方法断言失败时,就会回报 Failure,这时候要检查你的单元方法中的逻辑设计是否有误。Error 指的是你的程序没有考虑到的情况,在断言之前程序就因为某种

4、错误引发例外而终止,例如在单元中存取某个数组,因为存取超出索引而引发ArrayIndexOutOfBoundsException,这会使得单元方法无法正确完成,在测试运行到 asertXXXX()前就提前结束,这时候要检查你的单元方法中是否有未考虑到的情况而引发流程突然中断。JUnit 的各种断言JUnit 提供了一些辅助函数,用于帮助你确定某个被测试函数是否工作正常。通常而言,我们把所有这些函数统称为断言。断言是单元测试最基本的组成部分。1. assertEquals(String message, expected,actual)比较两个基本类型或对象是否相等(expected 和 act

5、ual 是原始类型数值(primitive value)或者必须为实现比较而具有 equal 方法);2.assertFalse(String message,boolean condition)对布尔值求值,看它是否为“真“ ;3.assertTrue(String message,boolean condition)对布尔值求值,看它是否为“假“ ;4.assertNull(String message,java.lang.Object object)检查对象是否为“空“;5.assertNotNull(String message,java.lang.Object object)检查对象

6、是否不为“空”;6.assertSame(String message,expected,actual)检查两个对象是否为同一实例;7.assertNotSame(String message,expected,actual)检查两个对象是否不为同一实例;8. fail( String message )使测试立即失败,其中 message 参数使可选的。这种断言通常被用于标记某个不应该到达的分支(例如,在一个预期发生的异常之后)一个 TestCase 测试实例下面是一个数字功能类,它提供了求最大值函数和求最小值函数:package com.zj.c01;public class Number

7、Tool public static int getMax(int arr) int max = Integer.MIN_VALUE;if (arr.length = 0)throw new RuntimeException(“Empty list“);for (int index = 0; index max)max = arrindex;return max;public static int getMin(int arr) int min = Integer.MAX_VALUE;if (arr.length = 0)throw new RuntimeException(“Empty li

8、st“);for (int i = 0; i 9;2.位序测试:9,8,7 -9;7,9,8 -9;8,7,9 -9;3.重复值测试:9,7,9,8 -9;4.单值测试:1-1;5.负值测试:-7,-8,-9-7;6.空值测试:-抛出异常;测试类 NumberToolTest:package com.zj.c01;import junit.framework.TestCase;public class NumberToolTest extends TestCase public NumberToolTest(String name) super(name);public void testSi

9、mple() assertEquals(9, NumberTool.getMax(new int 7, 8, 9 );public void testOrder() assertEquals(9, NumberTool.getMax(new int 9, 8, 7 );assertEquals(9, NumberTool.getMax(new int 7, 9, 8 );assertEquals(9, NumberTool.getMax(new int 8, 7, 9 );public void testDups() assertEquals(9, NumberTool.getMax(new

10、int 9, 7, 9, 8 );public void testOne() assertEquals(1, NumberTool.getMax(new int 1 );public void testNegitave() assertEquals(-7, NumberTool.getMax(new int -7, -8, -9 );public void testEmpty() try NumberTool.getMax(new int );fail(“Should have thrown an exception“); catch (RuntimeException e) assertTr

11、ue(true);使用 Eclipse-Run As JUnit TestJUnit 和异常对于测试而言,下面两种异常是我们可能会感兴趣的:1 从测试代码抛出的可预测异常。2 由于某个模块(或代码)发生严重错误,而抛出的不可预测异常。任何对 assertTrue(true)的使用都应该被翻译为“我预期控制流程会达到这个地方”。通常而言,对于方法中每个被期望的异常,你都应该写一个专门的测试来确认该方法在应该抛出异常的时候确实会抛出异常。如上例中testEmpty()测试方法的设计。对于处于出乎意料的异常,你最好简单的改变你的测试方法的声明让它能抛出可能的异常。JUnit 框架可以捕获任何异常,并

12、且把它报告为一个错误,这些都不需要你的参与。Per-method 的 Setup 和 Tear-down对于重复出现在各个单元测试中的运行环境,可以集中加以管理,可以在继承 TestCase 之后,重新定义 setUp()与 tearDown()方法,将数个单元测试所需要的运行环境在 setUp()中创建,并在 tearDown()中销毁。JUnit 的 TestCase 基类提供两个方法供你改写,分别用于环境的建立和清理:protected void setup();protected void teardown();测试类 MathToolTest2:package com.zj.c01;

13、import junit.framework.TestCase;public class NumberToolTest2 extends TestCase private int arr;public NumberToolTest2(String name) super(name);protected void setUp() throws Exception super.setUp();arr = new int -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 ;protected void tearDown() throws Exception super.tea

14、rDown();arr = null;public void testMax() assertEquals(5, NumberTool.getMax(arr);public void testMin() assertEquals(-5, NumberTool.getMin(arr);TestSuite每一个定义好的 TestCase,都使用 TestRunner 来运行测试,事实上TestRunner 并不直接运行 TestCase 上的单元方法,而是通过TestSuite , TestSuite 可以将数个 TestCase 组合在一起。在上面的例子中,并没有看到任何的 TestSuite,

15、这是因为 TestRunner的 run()方法中会建立 TestSuite:static public void run(Class testClass) run(new TestSuite(testClass);在这个 TestSuite 的建构式中,会使用反射自动找出 testXXX()方法,并加入待执行的测试方法, TestRunner 的 run()方法中会去执行 TestSuite 上的 run()方法,然后 TestSuite 会将之委托给 TestCase 上的 run()方法,而该 run()方法中执行每一个 testXXX()方法。如果你只想执行某 TestCase 中的部

16、分测试函数,则可自己构建TestSuite,下面的代码针对 NumberToolTest 中的两个测试函数testSimple()和 testNegitave()进行测试。package com.zj.c02;import com.zj.c01.NumberToolTest;import junit.framework.Test;import junit.framework.TestSuite;public class PartTest public static Test suite() TestSuite suite = new TestSuite();suite.addTest(new

17、NumberToolTest(“testSimple“);suite.addTest(new NumberToolTest(“testNegitave“);return suite;使用 Eclipse-Run As JUnit Test你也可以组合多个 testCase,下面的代码将 MathToolTest 和NumberToolTest 集中到一个 TestSuite 中:package com.zj.c02;import com.zj.c01.MathToolTest;import com.zj.c01.NumberToolTest;import junit.framework.Tes

18、t;import junit.framework.TestSuite;public class CompositeTest public static Test suite() TestSuite suite = new TestSuite(“Running all tests.“);suite.addTestSuite(MathToolTest.class);suite.addTestSuite(NumberToolTest.class);return suite;使用 Eclipse-Run As JUnit TestPer-suite Setup 和 Tear-down一般而言,你只须针

19、对每个方法设置运行环境;但是在某些情况下,你须为整个 test suite 设置一些环境,以及在 test suite 中的所有方法都执行完成后做一些清理工作。要达到这种效果,你需要 per-suite setup 和 per-suite teardown。Per-suite 的 setup 要复杂一些。你需要提供所需测试的一个 suite(无论通过什么样的方式)并且把它包装进一个 TestSetup 对象。注意你可以在同一个类中同时使用 per-sutie 和 per-test 的 setup()和 teardown。package com.zj.c02;import junit.exten

20、sions.TestSetup;import junit.framework.Test;import junit.framework.TestSuite;import com.zj.c01.MathToolTest;import com.zj.c01.NumberToolTest;public class WrapperCompositeTest public static Test suite() TestSuite suite = new TestSuite(“Running all tests with env.“);suite.addTestSuite(MathToolTest.class);suite.addTestSuite(NumberToolTest.class);TestSetup wrapper = new TestSetup(suite) protected void setUp() doSetUp();protected void tearDown() doTearDown();return wrapper;public static void doSetUp() / initialization codespublic static void doTearDown() / release codes

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报