JUnit介绍及测试

一,JUnit介绍

终于到了白盒测试,话说黑盒测试实在是又没水准又无聊,白盒测试才能彰显我们技术人员的风采。

先上定义吧:

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。[1-3]

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

废话真是多,可是自己总结又太难为词穷的我,简而言之JUnit是一个单元测试框架,而单元测试又是软件测试中比较承上启下的一部分,简单来说,就是对写好的函数进行测试,至于继承的TestCase类,下面会有详细的讲解。

下面用代码和引包来讲解下如何在我们最熟悉的eclipse中引入JUnit来进行测试(多图勿入,请在wifi条件下观看)。

二,代码及结果展示

1) 首先新建一个项目叫JUnit_Test,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的类,然后对这些功能进行单元测试,我们故意保留了一些Bug用于演示,这些Bug在注释中都有说明。该类代码如下:

  package andycpp;

  public class Calculator ...{

  private static int result; // 静态变量,用于存储运行结果

  public void add(int n) ...{

  result = result + n;

  }

  public void substract(int n) ...{

  result = result - 1; //Bug: 正确的应该是 result =result-n

  }

  public void multiply(int n) ...{

  } // 此方法故意为空

  public void divide(int n) ...{

  result = result / n;//好函数

  }

  public void square(int n) ...{

  result = n * n;//好函数

  }

  public void squareRoot(int n) ...{

  for (; ;) ; //Bug : 死循环

  }

  public void clear() ...{ // 将结果清零

  result = 0;

  }

  public int getResult() ...{

  return result;

  }

  }

2)

将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,在弹出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮,然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。

3)

生成JUnit测试框架:在Eclipse的Package Explorer中用右键点击该类弹出菜单,选择“JUnit 测试用例”。在弹出的对话框中,进行相应的选择,点击“下一步”后,系统会自动列出你这个类中包含的方法,选择你要进行测试的方法。此例中,我们仅对“加、减、乘、除”四个方法进行测试。之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。

4)

完整的CalculatorTest代码如下:

  package andycpp;

  import static org.junit.Assert.*;

  import org.junit.Before;

  import org.junit.Ignore;

  import org.junit.Test;

  public class CalculatorTest ...{

  private static Calculator calculator = new Calculator();

  @Before

  public void setUp() throws Exception ...{

  calculator.clear();

  }

  @Test

  public void testAdd() ...{

  calculator.add(2);

  calculator.add(3);

  assertEquals(5, calculator.getResult());

  }

  @Test

  public void testSubstract() ...{

  calculator.add(10);

  calculator.substract(2);

  assertEquals(8, calculator.getResult());

  }

  @Ignore("Multiply() Not yet implemented")

  @Test

  public void testMultiply() ...{

  }

  @Test

  public void testDivide() ...{

  calculator.add(8);

  calculator.divide(2);

  assertEquals(4, calculator.getResult());

  }

  }

5)

测试结果:运行测试代码:按照上述代码修改完毕后,我们在CalculatorTest类上点右键,选择“Run As à JUnit Test”来运行我们的测试,

运行结果如下:

  进度条是红颜色表示发现错误,具体的测试结果在进度条上面有表示“共进行了4个测试,其中1个测试被忽略,一个测试失败”。

功德圆满,大功告成。

时间: 2024-08-04 01:11:36

JUnit介绍及测试的相关文章

JUnit介绍

8.1.1  JUnit简介 JUnit主要用来帮助开发人员进行Java的单元测试,其设计非常小巧,但功能却非常强 大. 下面是JUnit一些特性的总结: — 提供的API可以让开发人员写出测试结果明确的可重用单元测试用例. — 提供了多种方式来显示测试结果,而且可以扩展. — 提供了单元测试批量运行的功能,而且可以和Ant很容易地整合. — 对不同性质的被测对象,如Class,JSP,Servlet等,JUnit有不同的测试方法. 8.1.2  为什么要使用JUnit 以前,开发人员写一个方法

Java高级特性 第11节 JUnit 3.x和JUnit 4.x测试框架

一.软件测试 1.软件测试的概念及分类 软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度 .完全度和质量的软件过程. 软件测试过程: 2.软件测试的分类 按是否关心软件内部结构和具体实现角度来分: 黑盒测试(Black-box Testing) 黑盒测试也称功能测试,测试中把被测的软件当成一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入

spring && Cobertura && maven &&junit 单元测试以及测试覆盖率

1. 目的: junit 单元测试,Cobertura   测试覆盖率报告 项目目录结构 2. maven 配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mave

JUnit之参数化测试和成组测试的使用

JUnit之参数化测试和成组测试的简单使用 参数化测试 正如数组替代int a0,a1,a2一样,测试加法时assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要测试100个怎么办. 所以,有了参数化测试,使用一个Collection收集所有的数据--加法时每一次测试需要的几个数据构成一组,n个组构成Collection. 然后按照JUnit的用法要求,写出单元测试类.(偷懒一下,不想写被测试的业务类X了.下面的例子中假设要测试的方法是,判断一个数是否奇数

Android中使用自身携带的Junit新建一个测试工程

1.新建立一个Android工程 package com.shellway.junit; public class Service { public int divide(int a,int b){ return a/b; } } Service.java.作为被测试类 package com.shellway.junit; import junit.framework.Assert; import android.test.AndroidTestCase; public class TestT

[深入JUnit] 为什么别测试private函数

[深入JUnit] 为什么别测试private函数 摘自http://www.tuicool.com/articles/iumaayJ 时间 2016-03-28 10:58:03 SegmentFault 原文  https://segmentfault.com/a/1190000004700616 主题 JUnit 比如说,Bird是我们要测试的class,它有public, protected,以及private的方法. // 文件位置:src/test/sample/Bird.java

Spring-test使用JUnit时,测试类autowired报错,create bean error

Spring-test使用JUnit时,测试类里面使用autowired会报错, 报create bean error...... 但是controller里面@autowired可以正常运行的. 在网上提问,确认我一定是在扫描包上出现了问题.但是controller里面明明是可以得啊. 等等,我是使用maven构建的项目,项目分成了main.test两个部分.配置文件都在main文件夹下,那么扫到的包相应的都是mian文件夹下的包,而测试类所在的包扫描不到也就理所当然了. 解决方案:暂时先给t

【Junit】Web测试

因为只写过一个Junit测试,又测试项目逻辑比较复杂,以下只介绍几个测试中遇到问题的解决思路. Web服务器:Linux 客户端:Linux/Windows(只要能执行java程序就行,测试java -jar Test_Client.jar) 问题 1.因为测试项目不同,需要执行部署不同的测试环境,怎么在客户端执行部署操作? 答:可以在java中通过SSH远程执行服务器中的命令,例如.(注,我引用的是网上随便找的包,当然你也可以自己写一个) import ch.ethz.ssh2.Connect

Junit介绍以及shi

在介绍junit之前,把一些知识点提前了解一下 单元测试是一个对单一实体(类或方法)的测试. 测试用例(Test Case)是为某个特殊目标而编制的一组测试输入.执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求. 测试套件:通常把一组相关的测试称为一个测试套件(test suite).    通过测试套件,将服务于同一个测试目的或同一运行环境下的一系列测试用例有机的组合起来.测试套件是按照测试计划所定义的各个阶段的测试目标决定的,即先有测试计划,后面才有测试套件. 回归测试是