JUnit测试框架的使用经验分享

1、学习Junit框架的使用

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

  A、Junit使用方法示例1

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

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

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

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

  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)

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-02 16:57:09

JUnit测试框架的使用经验分享的相关文章

Junit测试框架

最简单的例子介绍Junit测试框架 public class Person { public void run() { System.out.println("run!!!"); } public void eat() { System.out.println("eat!!!"); } public static void main(String[] args){ System.out.println("miao"); } } import or

用Jython构建JUnit测试包

JUnit 测试框架被越来越多的开发小组所共同使用.归功于各种各样的测试装具模块,现在可以测试构成任何 Java 应用程序的几乎每一个组件.事实上,几乎整个二级市场似乎都是用围绕 Junit 建立的.包括 Cactus.jfcUnit.XMLUnit.DbUnit 和 HttpUnit 这样的装具模块都可以免费供开发人员用于测试应用程序.随着系统的复杂程度的增加,并且有这么多工具可供使用,没有什么理由不依靠单元测试. 不过,开发人员不仅仅是程序员.我们与用户交互以修复 bug 并确定需求.我们参

《JavaScript忍者秘籍》——2.3 测试框架

2.3 测试框架 测试套件应该作为基本开发流程的一部分,所以应该选择一个非常适合自己代码风格和代码库的测试套件.一个JavaScript测试套件应该满足一个唯一需求:显示测试的结果,以便很容易地确定哪些测试通过的,哪些是失败的.测试框架可以帮助我们达到这一目标,除了创建测试并将其组织到测试套件中以外,不用再担心别的事情. 根据测试的需要,我们可以从JavaScript测试框架中找到很多功能.其中一些功能包括: 能够模拟浏览器行为(单击按键等). 测试的交互式控制(暂停和恢复测试). 处理异步测试

基于JUnit的InstallAnywhere安装程序图形界面自动测试框架

JUnit 简介 JUnit 是一个开源的单元测试框架,用于编写和运行自动测试,由 Erich Gamma 和 Kent Beck 在 1997 年开发完成.它包括以下特性: 提供的 API 可以让你写出测试结果明确的可重用单元测试用例: 提供了三种方式来显示你的测试结果,而且还可以扩展: 提供了单元测试用例成批运行的功能: 超轻量级而且使用简单,没有商业性的欺骗和无用的向导: 整个框架设计良好,易扩展. InstallAnywhere 简介 InstallAnywhere(下文简称 IA)是一

图片-Java SSH整合框架.tomcat能正常跑,没问题.用junit测试却报配置错误.

问题描述 Java SSH整合框架.tomcat能正常跑,没问题.用junit测试却报配置错误. 配置如第一张图. 报错如下面两张. new ClassPathXmlApplicationContext("applicationContext.xml");junit初始化配置时出现的问题.最后导致beanFactory.containsBean("Sys_UserDao")为fasle 解决方案 不是已经说了没有引人hibernate属性文件啊, 解决方案二: 你的

junit-搭建SSM框架进行JUnit测试spring和mybatis整合

问题描述 搭建SSM框架进行JUnit测试spring和mybatis整合 log4j:WARN No such property [converssionPattern] in org.apache.log4j.PatternLayout. log4j:WARN No such property [macFileSize] in org.apache.log4j.RollingFileAppender. [org.springframework.beans.factory.xml.XmlBea

一个可行的Selenium测试框架

老早就想写一些Selenium测试框架的搭建,但是时间和想法都不太成熟.今天 就大概粗略的和大家分享一下. 本文的背景假设读者有一定的selenium使用经验. 1.元素定位 大家都知道,网页这个东西在浏览器里展现出来的是一个完整的xml,所以可 以通过xml的访问方式,字符串查询,正则等来访问xml. selenium支持的遍历模式有: public class By { protected By(); protected By(Func<ISearchContext, IWebElement

Struts行为测试框架StrutsTestCase实战

阅读提要 StrutsTestCase是一个强有力的易于使用的针对Struts行为的测试框架.StrutsTestCase,并与传统型JUnit测试相结合,将会带给你一个相当高的测试覆盖率并提高你的产品的可靠性. 一.引言 StrutsTestCase是一个用于测试Struts行为的基于Junit的测试框架.如果你使用Struts,那么你会注意到它可以提供给你一种容易而有效的方式来测试你的应用程序的Struts行为类. 典型的J2EE应用程序都是分层构建的,如图1所示. ·DAO层封装了数据库存

spring junit测试

利用spring的mock类进行单元测试: spring框架提供了大量测试的mock类,包括与jndi,porlet,web应用相关的mock类.尤其是web应用相关 的mock类,可以大大提高web组件测试的方便性. 打开spring的下载包的mock文件夹(路径...mock\org\springframework\mock\web),就发觉有如下几个 文件: MockHttpServletRequest:是HttpServletRequest接口的mock实现,用来模拟客户端的HTTP请求