JUnit4单元测试实例图解_莫扎特的右手_百度空间

教程由JAVA中文网整理校对发布(javaweb.cc)

1.软件环境

Eclipse

JUnit4

2.为项目添加JUnit4库

A.添加Eclipse自带的Junit4

打开项目属性页->选择Java Build Path->点击Add Library->在弹出的对话框中选择JUnit->选择JUnit版本后点击Finish.

B添加Junit其他方法

打开项目属性页->选择Java Build Path->点击Add External JARS->选择JUnit地址后点击确定.

图2.2

3.修改代码目录

分别为单元测试代码与被测试代码创建单独的目录,单元测试代码和被测试代码使用一样的包,不同的目录。

选择项目属性->选择Java Build Path->在根目录下添加一个新目录,并把它加入到项目源代码目录中.

4.JUnit元数据

@Before:
使用了该元数据的方法在每个测试方法执行之前都要执行一次。
@After:
使用了该元数据的方法在每个测试方法执行之后要执行一次。
注意:@Before和@After标示的方法只能各有一个。这个相当于取代了JUnit以前版本中的setUp和tearDown方法,当然你还可以继续叫这个名字,不过JUnit不会霸道的要求你这么做了。
@Test(expected=*.class)
在JUnit4.0之前,对错误的测试,我们只能通过fail来产生一个错误,并在try块里面assertTrue(true)来测试。现在,通过@Test元数据中的expected属性。expected属性的值是一个异常的类型
@Test(timeout=xxx):
该元数据传入了一个时间(毫秒)给测试方法,
如果测试方法在制定的时间之内没有运行完,则测试也失败。
@ignore:
该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库联接,而在本地测试的时候,数据库并没有连接),那么使用该标签来标示这个方法。同时,你可以为该标签传递一个String的参数,来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。

5.实例

被测试代码:

package cc.javaweb.cooljunit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*对名称、地址等字符串格式的内容进行格式检查
*或者格式化的工具类
*
* @author javaweb.cc
*/
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 sb = new StringBuffer();

while(m.find()){
m.appendReplacement(sb, "_"+m.group());
}
return m.appendTail(sb).toString().toLowerCase();
}
}

单元测试代码:

package com.ai92.cooljunit;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class TestWordDealUtil {
//测试wordFormat4DB正常运行的情况
@Test public void wordFormat4DBNormal(){
String target = "employeeInfo";
String result = WordDealUtil.wordFormat4DB(target);

assertEquals("employee_info", result);
}

//测试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);
}
}

6.运行Junit

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

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

在测试类上点击右键,在弹出菜单中选择Run As JUnit Test。运行结果如下图所示:

[点击图片可在新窗口打开]

运行界面提示我们有两个测试情况未通过测试

——当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);——而当测试对null的处理结果时,则直接抛出了异常测试错误(error)

JUnit将测试失败的情况分为两种:failure和error。Failure一般由单元测试使用的断言方法判断失败引起,它表示在测试点发现了问题;而error则是由代码异常引起,这是测试目的之外的发现,它可能产生于测试代码本身的错误(测试代码也是代码,同样无法保证xx没有缺陷),也可能是被测试代码中的一个隐藏的bug。

7.测试套件

创建一个空类作为测试套件的入口。

使用注解org.junit.runner.RunWith和org.junit.runners.Suite.SuiteClasses修饰这个空类。

将org.junit.runners.Suite作为参数传入注解RunWith,以提示JUnit为此类使用套件运行器执行。

将需要放入此测试套件的测试类组成数组作为注解SuiteClasses的参数。

保证这个空类使用public修饰,而且存在公开的不带有任何参数的构造函数。

package cc.javaweb.cooljunit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
……
/**
*批量测试工具包中测试类
* @author javaweb.cc
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({xx1.class, xx2.class})
public class RunAllUtilTestsSuite {
}



郑重声明:资讯 【JUnit4单元测试实例图解_莫扎特的右手_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——