测试任何可能的错误。单元测试不是用来证明您是对的,而是为了证明您没有错。
2、单元测试代码和被测试代码使用一样的包,不同的目录。
--junit4.0使用注意说明;
3、测试方法必须按照规范书写
1. 测试方法必须使用注解 org.junit.Test 修饰。
2. 测试方法必须使用 public void 修饰,而且不能带有任何参数。
@Test public void wordFormat4DBegin(){
String target = "EmployeeInfo";
String result = WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info", result);
}
4、同一测试类中的所有测试方法都可以共用它来初始化 Fixture 和注销 Fixture。和编写 JUnit 测试方法一样,公共 Fixture 的设置也很简单,您只需要:
1. 使用注解 org,junit.Before 修饰用于初始化 Fixture 的方法。
2. 使用注解 org.junit.After 修饰用于注销 Fixture 的方法。
3. 保证这两种方法都使用 public void 修饰,而且不能带有任何参数。
//初始化Fixture方法
@Before public void init(){……}
//注销Fixture方法
@After public void destroy(){……}
引入了类级别的 Fixture 设置方法,编写规范如下:
1. 使用注解 org,junit.BeforeClass 修饰用于初始化 Fixture 的方法。
2. 使用注解 org.junit.AfterClass 修饰用于注销 Fixture 的方法。
3. 保证这两种方法都使用 public static void 修饰,而且不能带有任何参数
//类级别Fixture初始化方法
@BeforeClass public static void dbInit(){……}
//类级别Fixture注销方法
@AfterClass public static void dbClose(){……}
类级别的 Fixture 仅会在测试类中所有测试方法执行之前执行初始化,并在全部测试方法测试完毕之后执行注销方法。
5、注解 org.junit.Test 中有两个非常有用的参数:expected 和 timeout。
1、参数 expected 代表测试方法期望抛出指定的异常,如果运行测试并没有抛出这个异常,则 JUnit 会认为这个测试没有通过。
@Test(expected=UnsupportedDBVersionException.class)
public void unsupportedDBCheck(){
……
}
2、参数timeout,指定被测试方法被允许运行的最长时间应该是多少,如果测试方法运行时间超过了指定的毫秒数,则JUnit认为测试失败。
@Test(timeout=1000)
public void selfXMLReader(){
……
}
6、org.junit.Ignore 用于暂时忽略某个测试方法,因为有时候由于测试环境受限,并不能保证每一个测试方法都能正确运行。
@ Ignore(“db is down”)
@Test(expected=UnsupportedDBVersionException.class)
public void unsupportedDBCheck(){
……
}
7、新概念出现了——测试运行器
JUnit 中所有的测试方法都是由它负责执行的。JUnit 为单元测试提供了默认的测试运行器,但 JUnit 并没有限制您必须使用默认的运行器。相反,您不仅可以定制自己的运行器(所有的运行器都继承自 org.junit.runner.Runner),而且还可以为每一个测试类指定使用某个具体的运行器。指定方法也很简单,使用注解 org.junit.runner.RunWith 在测试类上显式的声明要使用的运行器即可:
@RunWith(CustomTestRunner.class)
public class TestWordDealUtil {
……
}
8、
在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解 决这个问题,JUnit 提供了一种批量运行测试类的方法,叫做测试套件。这样,每次需要验证系统功能正确性时,只执行一个或几个测试套件便可以了。测试套件的写法非常简单,您只 需要遵循以下规则:
1. 创建一个空类作为测试套件的入口。
2. 使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修饰这个空类。
3. 将 org.junit.runners.Suite 作为参数传入注解 RunWith,以提示 JUnit 为此类使用套件运行器执行。
4. 将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数。
5. 保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数。
package com.ai92.cooljunit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
……
/**
* 批量测试 工具包 中测试类
* @author Ai92
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({TestWordDealUtil.class,xxx.class})
public class RunAllUtilTestsSuite {
}
上例代码中,我们将前文提到的测试类 TestWordDealUtil 放入了测试套件 RunAllUtilTestsSuite 中,在 Eclipse 中运行测试套件,可以看到测试类 TestWordDealUtil 被调用执行了。测试套件中不仅可以包含基本的测试类,而且可以包含其它的测试套件,这样可以很方便的分层管理不同模块的单元测试代码。但是,您一定要保证 测试套件之间没有循环包含关系,否则无尽的循环就会出现在您的面前……
9、参数化测试
为了保证单元测试的严谨性,我们模拟了不同类型的字符串来测试方法的处理能力,为此我们编写大量的单元测试方法。可是这些测试方法都是大同小异:代码结构 都是相同的,不同的仅仅是测试数据和期望值。有没有更好的方法将测试方法中相同的代码结构提取出来,提高代码的重用度,减少复制粘贴代码的烦恼?在以前的 JUnit 版本上,并没有好的解决方法,而现在您可以使用 JUnit 提供的参数化测试方式应对这个问题。
参数化测试的编写稍微有点麻烦(当然这是相对于 JUnit 中其它特性而言):
1. 为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。
2. 为测试类声明几个变量,分别用于存放期望值和测试所用数据。
3. 为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
4. 为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
5. 编写测试方法,使用定义的变量作为参数进行测试。
我们按照这个标准,重新改造一番我们的单元测试代码:
@RunWith(Parameterized.class)
public class TestWordDealUtilWithParam {
private String expected;
private String target;
@Parameters
public static Collection words(){
return Arrays.asList(new Object[][]{
{"employee_info", "employeeInfo"}, //测试一般的处理情况
{null, null}, //测试 null 时的处理情况
{"", ""}, //测试空字符串时的处理情况
{"employee_info", "EmployeeInfo"}, //测试当首字母大写时的情况
{"employee_info_a", "employeeInfoA"}, //测试当尾字母为大写时的情况
{"employee_a_info", "employeeAInfo"} //测试多个相连字母大写时的情况
});
}
/**
* 参数化测试必须的构造函数
* @param expected 期望的测试结果,对应参数集中的第一个参数
* @param target 测试数据,对应参数集中的第二个参数
*/
public TestWordDealUtilWithParam(String expected , String target){
this.expected = expected;
this.target = target;
}
/**
* 测试将 Java 对象名称到数据库名称的转换
*/
@Test public void wordFormat4DB(){
assertEquals(expected, WordDealUtil.wordFormat4DB(target));
}
}
10、junit3兼容junit4可以在测试类中加入
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(AssertionTest.class);
}
11、JUnit 4 为比较数组添加了两个 assert() 方法:
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected, Object[] actual)
这两个方法以最直接的方式比较数组:如果数组长度相同,且每个对应的元素相同,则两个数组相等,否则不相等。数组为空的情况也作了考虑。
12、需要补充的地方
JUnit 4 基本上是一个新框架,而不是旧框架的升级版本。JUnit 3 开发人员可能会找到一些原来没有的特性。
最明显的删节就是 GUI 测试运行程序。如果您想在测试通过时看到赏心悦目的绿色波浪线,或者在测试失败时看到令人焦虑的红色波浪线,那么您需要一个具有集成 JUnit支持的 IDE,比如 Eclipse。不管是 Swing 还是 AWT 测试运行程序都不会被升级或捆绑到 JUnit 4 中。
下一个惊喜是,失败(assert 方法检测到的预期的错误)与错误(异常指出的非预期的错误)之间不再有任何差别。尽管JUnit3测试运行程序仍然可以区别这些情况,而JUnit4运行程序将不再能够区分。
最后,JUnit 4没有 suite()方法,这些方法用于从多个测试类构建一个测试套件。相反,可变长参数列表用于允许将不确定数量的测试传递给测试运行程序。
相关推荐
JUnit 4.0 是一个广泛使用的Java编程语言的单元测试框架。它极大地简化了测试代码的编写,并提供了丰富的断言库来验证代码的行为。在Java开发中,单元测试是确保代码质量、可维护性和可扩展性的重要环节。JUnit 4.0 ...
JUnit 4.0 是一个广泛使用的Java编程语言的单元测试框架。这个jar包是JUnit库的核心组件,使得开发者能够编写和执行针对他们代码的自动测试。在Java开发中,单元测试是确保代码质量、可维护性和减少bug的重要手段。...
Junit 4.0 是Java开发领域中一个重要的里程碑,它是JUnit系列的第四个主要版本,专注于提升测试的灵活性和可扩展性。JUnit是Java语言中最广泛使用的单元测试框架,它使得开发者能够编写易于理解、运行快速且可靠的...
JUnit是这些测试工具中最受欢迎的一个,因为它简单易用,且与大多数Java IDE很好地集成。JUnit 4.0版本是一个重要的里程碑,因为它引入了许多改进和新特性,显著提高了测试的灵活性和可扩展性。 首先,JUnit 4.0...
JUnit4.0是Java开发中广泛使用的单元测试框架,它为编写可重复执行的、可靠的测试提供了强大支持。本主题将深入探讨JUnit4的新特性,尤其是如何“放弃旧的断言,使用hamcrest断言”,以及如何有效地运行多个测试。 ...
《Junit 4.0 学习笔记》 ...总结,JUnit 4.0是Java开发者不可或缺的测试工具,其强大的功能和灵活性使得单元测试变得简单高效。通过深入学习和实践,我们可以更好地利用JUnit 4.0提升代码质量,确保软件的稳定性。
junit-4.0.jar
《深入理解Hibernate 4.2.4与JUnit 4.0》 在Java开发领域,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作,而JUnit则是进行单元测试的重要工具。本教程将围绕Hibernate 4.2.4版本与...
在给定的标题和描述中,我们关注的是如何使用Hibernate来连接PostgreSQL数据库,并且提到了一些关键的库文件,如hibernate-junit4.0、postgresql-8.4-jdbc等。 首先,让我们深入了解每个组件: 1. **Hibernate**:...
JUnit 4.0引入了许多改进,比如注解、参数化测试和测试套件等,使得测试代码更加简洁和易读。在Selenium项目中,你可以为每个功能或页面创建一个JUnit测试类,每个测试方法对应一个具体的测试场景。 在使用这些jar...
5. `使用说明.txt`:这是一个文本文件,很可能包含了 JUnit 的基本使用教程或者一些注意事项,对于初学者来说是很好的入门资料。 6. `安卓游戏下载.url`, `单机游戏下载.url`, `更多软件点击进入.url`:这些看起来...
标题中的"Year_junit4_poetqqj_"可能是指一个关于使用JUnit 4.0进行年度测试的项目或教程,而"poetqqj"可能是个人名称、项目代号或者是某种编码规则的一部分,但在这里没有具体含义。描述中的“测试模块使用Junit ...
JUnit4视频教程及源码,由于文件较大,分割为JUnit4_01.zip,JUnit4_02.zip,JUnit4_03.zip三个压缩包并附文档,下载后解压便可观看视频,导入代码,直接在自己的机器上运行
JUnit是由Erich Gamma和Kent Beck创建的Java单元测试框架。 junit/junit/4.0/junit-4.0.pom
《HL7映射验证器:基于JavaScript的DSL与JUnit4.0的集成应用》 HL7映射验证器是一款专为医疗信息系统设计的工具,它主要用于验证两个HL7(Health Level Seven)版本2.X消息之间的字段映射是否准确无误。在IT行业中...
JUnit的第一个版本是JUnit 1.0,后来陆续发布了多个版本,如JUnit 3.8、JUnit 4.0、JUnit 4.11等。2015年,JUnit 5发布,带来了许多新的特性和改进。 JUnit的架构 JUnit的架构主要由三个部分组成:Test Runner、...
接下来将通过一个简单的“Hello World”测试案例来演示JUnit的基本用法: 1. **创建测试类**: ```java import junit.framework.TestCase; public class HelloWorldTest extends TestCase { public ...
总结来说,JUnit 4.0是Java开发中的必备工具,它提供的强大功能使得单元测试变得既简单又高效,对于确保代码质量和提升开发效率起到了至关重要的作用。无论你是初学者还是经验丰富的开发者,理解和熟练使用JUnit都是...
总的来说,JUnit通过提供简洁的API和注解,使得编写和执行单元测试变得简单高效。对于`Calculator`类这样的代码,JUnit帮助我们发现和修复问题,确保代码的质量和稳定性。无论是在开发阶段还是在维护阶段,持续的...