资源描述
JunitJUnit简介lJUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。JUnit特性 lJUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:1、用于测试期望结果的断言(Assertion)2、用于共享共同测试数据的测试工具 3、用于方便的组织和运行测试的测试套件 4、图形和文本的测试运行器 初识初识JUnit测试框架测试框架 l单元级测试在面向对象的开发中变得越来越重要,而一个简明易学、适用广泛、高效稳定的单元级测试框架对成功的实施测试有着至关重要的作用。在java编程环境中,Junit Framework是一个已经被多数java程序员采用和实证的优秀的测试框架。开发人员只需要按照Junit的约定编写测试代码,就可以对自己要测试的代码进行测试。初识初识JUnit测试框架测试框架 l我们创建一个Java工程,项目名称为JunitLesson1,添加一个example.Hello类,首先我们给Hello类添加一个abs()方法,作用是返回绝对值,源代码如下:lpackage example;lpublic class Hello lpublic int reAbs(int a)lreturn a 0?a:-a;ll初识初识JUnit测试框架测试框架l因为MyEclipse现在默认的是Junit3.8,我们准备使用Junit4,所以必须在项目里面导入Junit4包。选择project-properties,在左侧树形条里面选择”java build path”,单击右边的Libraries选项卡,如下图所示,点击”add External JARs.”,找到Junit4.4.jar,将他导入到项目内。例1:MaxMinTool.java lpublic class MaxMinTool public static int getMax(int arr)int max=Integer.MIN_VALUE;for(int i=0;i max)max=arri;return max;public static int getMin(int arr)int min=Integer.MAX_VALUE;for(int i=0;i arr.length;i+)if(arri min)min=arri;return min;编写MaxMinTool.java 的测试类lpublic class MaxMinTest extends TestCase public void testMax()int arr=-5,-4,-3,-2,-1,0,1,2,3,4,5;assertEquals(5,MaxMinTool.getMax(arr);public void testMin()int arr=-5,-4,-3,-2,-1,0,1,2,3,4,5;assertEquals(-5,MaxMinTool.getMin(arr);编写测试类l显然,所准备的矩阵重复出现在两个单元测试之中,重复的程序码在设计中可以减少就尽量减少,在这两个单元测试中,整数矩阵是单元方法所需要的资源,我们称之为fixture,也就是一个测试时所需要的资源集合。l对于重复出现在各个单元测试中的fixture,可以集中加以管理,可以在继承TestCase之后,重新定义setUp()与tearDown()方法,将数个单元测试所需要的fixture在setUp()中创建,并在tearDown()中销毁,例如:测试类的改进lpublic class MaxMinTest extends TestCase private int arr;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.tearDown();arr=null;public void testMax()assertEquals(5,MaxMinTool.getMax(arr);public void testMin()assertEquals(-5,MaxMinTool.getMin(arr);lsetUp()方法会在每一个单元测试testXXX()方法开始前被调用,因而整数矩阵会被建立,而tearDown()会在每一个单元测试 testXXX()方法结束后被呼叫,因而整数矩阵参考名称将会参考至null,如此一来,可以将fixture的管理集中在 setUp()与tearDown()方法之后。测试类的进一步改进l上述方法进行单元测试时,测试方法必须以testXXX()命名,在junit4中可以用test注释作为测试方法的开始。如:package example;import static org.junit.Assert.*;import org.junit.Test;public class MaxMinToolTest int a=new int5,6,-2,-9,30;Testpublic void testGetMax()/MaxMinTool m=new MaxMinTool();assertEquals(你的计算是不是出错了,30,MaxMinTool.getMax(a);Testpublic void testGetMin()/MaxMinTool m=new MaxMinTool();assertEquals(你的计算是不是出错了,-7,MaxMinTool.getMin(a);Assert有8个公有核心方法 练习l使用Junit对下面程序进行测试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;public class MathToolTest extends TestCase public void testGcd()assertEquals(5,MathTool.gcd(10,5);l在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解决这个问题,JUnit 提供了一种批量运行测试类的方法,叫做测试套件。这样,每次需要验证系统功能正确性时,只执行一个或几个测试套件便可以了。测试套件的写法非常简单,您只需要遵循以下规则 l创建一个空类作为测试套件的入口。l使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修饰这个空类。l将 org.junit.runners.Suite 作为参数传入注解 RunWith,以提示 JUnit 为此类使用套件运行器执行。l将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数。l保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数。例:lpackage example;limport org.junit.runner.RunWith;limport org.junit.runners.Suite;lRunWith(Suite.class)lSuite.SuiteClasses(MaxMinTest1.class,MaxMinToolTest.class)lpublic class TestAll ll上例代码中,我们将前文提到的测试类MaxMinTest1和MaxMinToolTest放入了测试套件 RunAllUtilTestsSuite 中,在 Eclipse 中运行测试套件,可以看到两个测试类都被调用执行了。测试套件中不仅可以包含基本的测试类,而且可以包含其它的测试套件,这样可以很方便的分层管理不同模块的单元测试代码。但是,您一定要保证测试套件之间没有循环包含关系,否则无尽的循环就会出现在您的面前。Junit参数化设置JUnit4中参数化测试要点l1.测试类必须由Parameterized测试运行器修饰 2.准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求:1)该方法必须由Parameters注解修饰 2)该方法必须为public static的 3)该方法必须返回Collection类型 4)该方法的名字不做要求 5)该方法没有参数 测试方法:lPublic class MyAddpublic int add(int a,int b)return a+b;l测试代码:lpackage example;limport java.util.Arrays;limport java.util.Collection;limport org.junit.Assert;limport org.junit.Test;limport org.junit.runner.RunWith;limport org.junit.runners.Parameterized;limport org.junit.runners.Parameterized.Parameters;l/*l*参数化测试的类必须有Parameterized测试运行器修饰 l*l*/lRunWith(Parameterized.class)lpublic class MyAddTest l l private int input1;l private int input2;l private int expected;l /*l *准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求:l l 1)该方法必须由Parameters注解修饰 l 2)该方法必须为public static的 l 3)该方法必须返回Collection类型 l 4)该方法的名字不做要求 l 5)该方法没有参数 l *return l */lParameters l SuppressWarnings(unchecked)l public static Collection prepareData()l Object object=-1,-2,-3,0,2,2,-1,1,0,1,2,3;l return Arrays.asList(object);l l public MyAddTest(int input1,int input2,int expected)l this.input1=input1;l this.input2=input2;l this.expected=expected;l l Test l public void testAdd()l MyAdd add=new MyAdd();l int result=add.add(input1,input2);l Assert.assertEquals(expected,result);l l第一步:在eclipse中新建一个包含junit库的项目(1)第一步:在eclipse中新建一个包含junit库的项目(1)第一步:在eclipse中新建一个包含junit库的项目(1)第一步:在eclipse中新建一个包含junit库的项目(1)第一步:在eclipse中新建一个包含junit库的项目(1)要选junit3第一步:在eclipse中新建一个包含junit库的项目(1)选择junit3第二步:编写java类文件(2)第二步:编写java类文件(2)第二步:编写java类文件(2)第三步:生成测试用例(3)第三步:生成测试用例(3)第三步:生成测试用例(3)第三步:生成测试用例(3)第四步:修改测试用例(4)测试固件测试方法测试用例第五步:运行测试用例类(5)第五步:运行测试用例类(5)第六步:生成测试套件(6)第六步:生成测试套件(6)第六步:生成测试套件(6)第六步:生成测试套件(6)第七步:执行测试套件(7)第七步:执行测试套件(7)
展开阅读全文