在Eclipse中使用JUnit进行单元测试目录1.JUnit简介....................................................................................................................................22.JUnit优点....................................................................................................................................23.JUnit特性....................................................................................................................................34.JUnit运用....................................................................................................................................35.JUnit重要元素..........................................................................................................................171.JUnit简介JUnit是一个Java语言的单元测试框架。它由KentBeck和ErichGamma建立,逐渐成为源于KentBeck的sUnit的xUnit家族中最为成功的一个。JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。JUnit是由ErichGamma和KentBeck编写的一个回归测试框架(regressiontestingframework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。2.JUnit优点junit是在极限编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率,但是实际上编写测试代码也是需要耗费很多的时间和精力的,那么使用这个东东好处到底在哪里呢?笔者认为是这样的:极限编程要求在编写代码之前先写测试,这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑,否则编写的代码很不稳定,那么你需要同时维护测试代码和实际代码,这个工作量就会大大增加。因此在极限编程中,基本过程是这样的:构思-编写测试代码-编写代码-测试,而且编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。重构其好处和极限编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。其他情况我们在开发的时候使用junit写一些适当的测试也是有必要的,因为一般我们也是需要编写测试的代码的,可能原来不是使用的junit,如果使用junit,而且针对接口(方法)编写测试代码会减少以后的维护工作,例如以后对方法内部的修改(这个就是相当于重构的工作了)。另外就是因为junit有断言功能,如果测试结果不通过会告诉我们哪个测试不通过,为什么,而如果是像以前的一般做法是写一些测试代码看其输出结果,然后再由自己来判断结果是否正确,使用junit的好处就是这个结果是否正确的判断是它来完成的,我们只需要看看它告诉我们结果是否正确就可以了,在一般情况下会大大提高效率。3.JUnit特性JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:1、用于测试期望结果的断言(Assertion)2、用于共享共同测试数据的测试工具3、用于方便的组织和运行测试的测试套件4、图形和文本的测试运行器4.JUnit运用第一步:下载JUnit的jar包,下载地址:;第二步:安装Eclipse安装程序,已经安装好!第三步:利用junit在eclipse中开发自动化脚本;JUnit可以和很多开发工具进行集成来进行单元测试,我们这里选取较常用的java开发工具Eclipse来使用JUnit4进行单元测试。如何在开发工具Eclipse里进行单元测试?第四步:首先启动Eclipse,并在Eclipse中建立一个java项目,项目名称为JNuit_test1。如下图所示:单击【完成】即可;第五步:在建立好的项目名称(JNuit_test)上右键单击【属性】,系统弹出如下图所示:第六步:选择java构建路径→库→我们这里选择前面下载的junit-4.12.jar包,故单击【添加外部JAR(X)】按钮,系统弹出如下对话框,选择junit-4.12.jar包后,单击【打开】键,如下图所示:第七步:在建立好的项目名称(JNuittest)上右键单击【新建】→【包】,取包名称为andycpp,系统弹出如下图所示:第八步:在建立好的类名称【andycpp】上右键单击【新建】→类,取名称为【Calculator】,如下图所示:第九步:我们在此编写一个类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些Bug用于演示,这些Bug在注释中都有说明。该类代码如下:packageandycpp;publicclassCalculator{privatestaticintresult;//静态变量,用于存储运行结果publicvoidadd(intn){result=result+n;}publicvoidsubstract(intn){result=result-1;//Bug:正确的应该是result=result-n}publicvoidmultiply(intn){}//此方法尚未写好publicvoiddivide(intn){result=result/n;}publicvoidsquare(intn){result=n*n;}publicvoidsquareRoot(intn){for(;;);//Bug:死循环}publicvoidclear(){//将结果清零result=0;}publicintgetResult(){returnresult;}}第十步:生成JUnit测试框架,选中已经编好的类,单击右键【新建】→JUnit测试用例,如下图所示:单击【下一步】显示测试方法,下面我们只选择四项,如下图所示:单击【完成】键,系统创建了一个测试类,类名称为CalculatorTest.java;代码如下:第十一步:对上面测试类代码进行完善,代码如下图所示:packageandycpp;importjunit.framework.TestCase;importorg.junit.Before;importorg.junit.Test;publicclassCalculatorTestextendsTestCase{privatestaticCalculatorcalculator=newCalculator();@BeforepublicvoidsetUp()throwsException{calculator.clear();}publicvoidtestAdd(){calculator.add(2);calculator.add(3);assertEquals(5,calculator.getResult());}@TestpublicvoidtestSubstract(){calculator.add(10);calculator.substract(8);System.out.println(calculator.getResult());assertEquals(9,calculator.getResult());}@TestpublicvoidtestMultiply(){System.out.println();}@TestpublicvoidtestDivide(){calculator.add(8);calculator.divide(2);assertEquals(4,calculator.getResult());}}第十二步:对上面的测试类进行完善后,右键单击【CalculatorTest.java】→【运行方式】→【JUnit测试】,测试结果如下:第十三步:为了查询这两个错误,可以双击对应错误结果,在右侧对应方法有显示,如下图所示:上面的期望结果,若改为【5】,测试加的结果通过,如下图所示:接着我们看看第二个错误的原因,重新运行测试,如下图所示:通过上图分析,是程序逻辑存在错误,故查看Calculator.java类,发现Substract的逻辑为如下图所示:修改程序的逻辑表达式为result=result-n,再次执行测试用例,如下图所示:以上是一个简单的加减乘除运算的逻辑程序,通过这个程序演示了JUnit测试框架在Eclipse中的运用。5.JUnit重要元素A、@TEST方法的前面使用@Test标注,以表明这是一个测试方法。对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。@TestpublicvoidtestAdd(){calculator.add(2);calculator.add(3);System.out.println(calculator.getResult());assertEquals(5,calculator.getResult());}B、@Before注解:在每个测试方法之前执行;C、@After注解:在每个测试方法之后执行;D、@BeforeClass注解:在所有方法执行之前执行;E、@AfterClass注解:在所有方法执行之后执行;F、@Test(timeout=xxx)注解:设置当前测试方法在一定时间内运行完,否则返回错误;G、@Test(expected=Exception.class)注解:设置被测试的方法是否有异常抛出。抛出异常类型为:Exception.class;H、@Ignore注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。参考资料:://blog.csdn.net/wangpeng047/article/details/9627527;