JUnit测试框架的使用

1、学习Junit框架的使用

可通过以下两个示例进行学习。

A、Junit使用方法示例1

1)把Junit引入当前项目库中

新建一个 Java 工程—coolJUnit,打开项目coolJUnit 的属性页 -> 选择“Java Build Path”子选项 -> 点选“Add Library…”按钮 -> 在弹出的“Add Library”对话框中选择 JUnit(图1),并在下一页中选择版本 Junit 4 后点击“Finish”按钮。这样便把 JUnit 引入到当前项目库中了。

2)新建单元测试代码目录

单元测试代码是不会出现在最终软件产品中的,所以最好为单元测试代码与被测试代码创建单独的目录,并保证测试代码和被测试代码使用相同的包名。这样既保证了代码的分离,同时还保证了查找的方便。遵照这条原则,在项目 coolJUnit 根目录下添加一个新目录 testsrc,并把它加入到项目源代码目录中。(见 图2、3)。

3)在工程中添加类

添加类SampleCaculator,类中有两个方法,分别计算加减法。编译代码。

public class SampleCalculator {

    //计算两整数之和
    public int add(int augend, int addend){
        return augend + addend;
    }

    //计算两整数之差
    public int subtration(int minuend, int subtrahend){
        return minuend - subtrahend;
    }
}

4)写单元测试代码

为类SampleCalculator添加测试用例。在资源管理器SampleCalculator.java文件处右击选new>选Junit Test Case(见图4),Source foler选择testsrc目录,点击next,选择要测试的方法,这里把add和subtration方法都选上,最后点finish完成。

Junit自动生成测试类SampleCalculatorTest,修改其中的代码(如下)。

其中assertEquals断言,用来测试预期目标和实际结果是否相等。

assertEquals( [Sting message], expected, actual )

expected是期望值(通常都是硬编码的),actual是被测试代码实际产生的值,message是一个可选的消息,如果提供的话,将会在发生错误时报告这个消息。

如想用断言来比较浮点数(在Java中是类型为float或者double的数),则需指定一个额外的误差参数。

assertEquals([Sting message], expected, actual, tolerance)

其它断言参见课本和参考书介绍。测试方法需要按照一定的规范书写:

1. 测试方法必须使用注解 org.junit.Test 修饰。

2. 测试方法必须使用 public void 修饰,而且不能带有任何参数。

5)查看运行结果

在测试类上点击右键,在弹出菜单中选择 Run As JUnit Test。运行结果如下图,绿色的进度条提示我们,测试运行通过了。

B、Junit使用方法示例2

1)在工程中添加类

类WordDealUtil中的方法wordFormat4DB( )实现的功能见文件注释。

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class WordDealUtil {

    /**

     * 将Java对象名称(每个单词的头字母大写)按照

     * 数据库命名的习惯进行格式化

     * 格式化后的数据为小写字母,并且使用下划线分割命名单词

     * 例如:employeeInfo 经过格式化之后变为 employee_info

     * @param name Java对象名称

     */

    public static String wordFormat4DB(String name){

        Pattern p = Pattern.compile("[A-Z]");

        Matcher m = p.matcher(name);

        StringBuffer strBuffer = new StringBuffer();

        while(m.find()){
            //将当前匹配子串替换为指定字符串,
            //并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里
            m.appendReplacement(strBuffer, "_"+m.group());

        }

        //将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里
        return m.appendTail(strBuffer).toString().toLowerCase();
    }

}

2)写单元测试代码

import static org.junit.Assert.*;
import org.junit.Test;
public class WordDealUtilTest {

	@Test
	public void testWordFormat4DB() {
		String target = "employeeInfo";
		String result = WordDealUtil.wordFormat4DB(target);
		assertEquals("employee_info", result);
	}
}

3)进一步完善测试用例

单元测试的范围要全面,如对边界值、正常值、错误值的测试。运用所学的测试用例的设计方法,如:等价类划分法、边界值分析法,对测试用例进行进一步完善。继续补充一些对特殊情况的测试:

//测试 null 时的处理情况

    @Test public void wordFormat4DBNull(){
        String target = null;
        String result = WordDealUtil.wordFormat4DB(target);
        assertNull(result);
    }

    //测试空字符串的处理情况
    @Test public void wordFormat4DBEmpty(){
        String target = "";
        String result = WordDealUtil.wordFormat4DB(target);
        assertEquals("", result);
    }

    //测试当首字母大写时的情况
    @Test public void wordFormat4DBegin(){
        String target = "EmployeeInfo";
        String result = WordDealUtil.wordFormat4DB(target);
        assertEquals("employee_info", result);
    } 

    //测试当尾字母为大写时的情况
    @Test public void wordFormat4DBEnd(){
        String target = "employeeInfoA";
        String result = WordDealUtil.wordFormat4DB(target);
        assertEquals("employee_info_a", result);
    }

    //测试多个相连字母大写时的情况
    @Test public void wordFormat4DBTogether(){
        String target = "employeeAInfo";
        String result = WordDealUtil.wordFormat4DB(target);
        assertEquals("employee_a_info", result);
    }

4)查看分析运行结果,修改错误代码

再次运行测试。JUnit 运行界面提示我们有两个测试情况未通过测试(见图6),当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);而当测试对 null 的处理结果时,则直接抛出了异常——测试错误(error)。显然,被测试代码中并没有对首字母大写和 null 这两种特殊情况进行处理,修改如下:

//修改后的方法wordFormat4DB

         public static String wordFormat4DB(String name){
                  if(name == null){
                           return null;
                  }
                  Pattern p = Pattern.compile("[A-Z]");
                  Matcher m = p.matcher(name);
                  StringBuffer sb = new StringBuffer();
                  while(m.find()){
                           if(m.start() != 0)
                                    m.appendReplacement(sb, ("_"+m.group()).toLowerCase());
                  }
                  return m.appendTail(sb).toString().toLowerCase();
         }

2、使用Junit框架对类Date和类DateUtil(参见附录)进行单元测试。

只对包含业务逻辑的方法进行测试,包括:

类Date中的

isDayValid(int year, int month, int day)

isMonthValid(int month)

isYearValid(int year)

类DateUtil中的

isLeapYear(int year)

getDayofYear(Date date)

时间: 2024-10-11 23:20:29

JUnit测试框架的使用的相关文章

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

Junit测试框架 Tips

关于Junit测试框架使用的几点总结: 1.Junit中的测试注解: @Test →每个测试方法前都需要添加该注解,这样才能使你的测试方法交给Junit去执行. @Before →在每个测试方法执行前运行.因为每个测试方法执行之前会先执行该方法,所以会被执行多次. @After →在每个测试方法执行后执行.因为每个测试方法执行之后会先执行该方法,所以会被执行多次. @BeforeClass →运行测试类,在该类中的每个测试方法执行之前被运行,只执行一次. @AfterClass →运行测试类,在

Android Junit测试框架

对应用进行单元测试: 使用Junit测试框架,是正规Android开发的必用技术.在Junit中可以得到组件,可以模拟发送事件和检测程序处理的正确性. 1.配置指令集和函数库: (1)配置指令集,指定要测试的应用程序 需要在AndroidManifest.xml的instrumentation中增加InstrumentationTestRunner,并指定要测试的包名. AndroidManifest.xml中会添加代码: <instrumentation android:targetPacka

Spring整合Junit测试框架

在工作中,很多项目是基于ssm框架的web项目,在编写完代码需要进行测试.但是对象都交由Spring容器进行对象管理之后,测试变得复杂了.因为所有的Bean都需要在applicationContext.xml中加载好,之后再通过@Resource去取得.如果每次都要整个业务流做的差不多了再去测试,这样效率很低,很多同学可能是通过web端发请求进行触发测试.有时候,我们仅仅是需要测试我们dao层sql是否正确,但是确要重启服务器,在浏览器发送请求进行测试,或者写个定时器触发测试.这很费事费时.所以

Java Junit测试框架

Java    Junit测试框架 1.相关概念 ? JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要用于白盒测试,回归测试. ? 白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人 员是公开的. ? 回归测试:软件或环境的修复或更正后的再测试,自动测试工具对这类测试尤其有用. ? 单元测试:最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程序设

Android Junit测试框架的配置

instrumentation指令集需要在manifest节点下 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.junittest" /> uses-library 需要在application节点下 <uses-library android:name="android.t

JUnit - 测试框架

什么是 Junit 测试框架? JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量.JUnit 测试框架能够轻松完成以下任意两种结合: Eclipse 集成开发环境 Ant 打包工具 Maven 项目构建管理 特性 JUnit 测试框架具有以下重要特性: 测试工具 测试套件 测试运行器 测试分类 测试工具 测试工具是一整套固定的工具用于基线测试.测试工具的目的是为了确保测试能够在共享且固定的环境中运行,因此保证测试结果的可重复性.它包括:

Java高级特性 第10节 IDEA和Eclipse整合JUnit测试框架

一.IDEA整合Junit测试框架 1.安装插件 打开File菜单的下拉菜单settings[设置] : 点击左侧Plugins[插件]菜单 在输入框中输入JUnitGenerator 2.0,点击Install 重启IDEA 2.配置插件 打开settings[设置] 点击左侧Other Settings[其他]菜单 点击左侧JUnit Generator菜单 点击Properties[属性]页签 修改Output Path[输出路径]为${SOURCEPATH}/../../test/jav

[android] android下junit测试框架配置

我们的业务代码一般是放在一个新的包下面,这个业务类不能够通过右键run as java application,因为android项目只能运行在手机上的dalvak虚拟机里面 新建一个包,里面写测试类,测试类需要继承AndroidTestCase类,写测试方法,需要throws exception抛出异常给测试框架,测试方法里面一般new出需测试的类,调用它的方法,然后断言结果,assertEquals(预估, 实际结果) 在outline视窗 (window=>show view=>outl

原创:Spring整合junit测试框架(简易教程 基于myeclipse,不需要麻烦的导包)

我用的是myeclipse 10,之前一直想要用junit来测试含有spring注解或动态注入的类方法,可是由于在网上找的相关的jar文件进行测试,老是报这样那样的错误,今天无意中发现myeclipse本就自带了 spring基于junit的测试框架,而且非常好用. 1.废话不多说,首先添加 测试框架的 类库:项目-->buildpath-->addlibraries-->myelipse libraries-->Spring 2.5 testing  support librar