- 浏览: 279718 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (133)
- GWT (7)
- IT生活 (9)
- JAVA综合 (38)
- Servlet (5)
- vaadin (2)
- About Eclipse (2)
- StarUML (1)
- Spring (7)
- ibatis (3)
- web (35)
- ExtJs (2)
- Quartz (13)
- Struts (1)
- 学习XML (6)
- io流 (2)
- web应用之压缩 (3)
- Spring MVC (0)
- Velocity (5)
- 静态代码分析工具 (2)
- 观点 (1)
- JUnit (3)
- jQuery (4)
- mysql (2)
- javascript (16)
- linux (4)
- pattern (1)
- java加密技术 (2)
最新评论
-
tan4836128:
确实不行,我的1.8.5,降到1.6.2也不行,楼主的情况很局 ...
Spring调用Quartz定时任务报Couldn't store trigger异常 -
alfusen_xiong:
有没有自动注入的方法可以取代executeInternal() ...
Quartz任务中调用Spring容器中bean及动态调度任务 -
luoxiang183:
换了也不行啊
Spring调用Quartz定时任务报Couldn't store trigger异常 -
liubey:
首先谢谢LZ的文章,其实我想问个问题,既然有心做成工具类,就最 ...
对象和map转换 -
小林夕:
几年前用还行,现在做UML一般都开始使用在线作图工具了,可以了 ...
StarUML简介
因jdk5中的新特性,JUnit4也因此有了很大的改变。确切的说,Junit4简直就不是3的扩展版本,而是一个全新的测试框架。下面详细介绍JUnit4的使用方法
1.测试方法:
在junit4之前,测试类通过继承TestCase类,并使用命名约束来定位测试,测试方法必须以“test”开头。Junit4中使用注释类识别:@Test,也不必约束测试方法的名字。当然,TestCase类仍然可以工作,只不过不用这么繁琐而已。
Junit中还因JDK5而增加了一项新特性,静态导入(static import)。
2.固件测试
所谓固件测试(Fixture),就是测试运行运行程序(test runner)会在测试方法之前自动初始化、和回收资源的工作。JUnit4之前是通过setUp、TearDown方法完成。在Junit4中,仍然可以在每个测试方法运行之前初始化字段,和配置环境,当然也是通过注释完成。Junit4中,通过@befroe替代setUp方法;@After替代tearDown方法。在一个测试类中,甚至可以使用多个@Before来注释多个方法,这些方法都是在每个测试之前运行。说明一点,@Before是在每个测试方法运行前均初始化一次,同理@Ater是在每个测试方法运行完毕后,均匀性一次就是说,经这两个注释的初始化和注销,可以保证各个测试之间的独立性而互不干扰,他的缺点是效率低。另外,不需要在朝类中显示调用初始化和清除方法,只要他们不被覆盖,测试运行程序将根据需要自动调用这些方法。超类中的@Before方法在自来的@Before方法之前调用(与构造函数调用顺序一致),@After方法是子类中的在超类之前运行。
在JUnit4中加入了一项新特性。加入了两个注释:@BeforeClass和@AfterClass,使用这两个注释的方法,在该测试类中,的测试方法之前、后各运行一次,而不是按照方法各运行一次。对于消耗很的啊的资源,可以使用这两个注释。
3.异常测试
因为使用了注释特性,JUnit4测试异常非常的简单和明了。通过对@Test传入expected参数值,即可测试异常。通过传入异常类后,测试类如果没有抛出异常或者抛出一个不同的异常,本测试方法就将失败。见代码:
测试成功后,方法前会出现一个小沟,大家可能注意到了,read()方法,代码中有一个奇怪的@Ignore注释,测试后也会出现一个标识。@Ignore注释表示忽略注释,运势测试类时,被@Ignore注释的方法将不会被测试,所以运行测试类后,会出行一个奇怪的标识。
4.超时测试
通过在@Test注释中,为timeout参数指定时间值,即可进行超时测试。如果测试运行时间超过指定的毫秒数,则测试失败。超时测试对网络链接类的非常重要,通过timeout进行超时测试,简单异常。如下例子:
5.测试运行器
测试运行器:JUNit中所有的测试方法都是由它负责执行。JUnit为单元测试提供了默认的测试运行器,但是没有限制必须使用默认的运行器。自己定制的测试运行器必须继承自org.junit.runner.Runner。而且还可以为每一个测试类指定某个运行器:@Runwith(CustomTestRunner.class).在JUnit中,有两个高级特性会需要自定义运行器。
6.测试套件
JUnit4中最显著的特性是没有套件(套件机制用于将测试从逻辑上的分组并将这这些测试作为一个单元测试来运行)。为了替代老版本的套件测试,套件被两个新注释代替:@RunWith、@SuteClasses。通过@RunWith指定一个特殊的运行器:Suite.class套件运行器,并通过@SuiteClasses注释,将需要进行测试的类列表作为参数传入。
使用方法为:
a.创建一个空类作为测试套件的入口
b.将@RunWith、@SuiteClasses注释修饰这个空类;
c.吧Suite.class作为参数传入@RunWith注释,以提示JUnit将此类指定为运行器;
d.将需要测试的类组成数组作为@SuiteClasses的参数。
注意:这个空类必须使用public修饰符,而且存在public的无参构造函数(类的默认构造函数即可)。测试代码如下:将先前的两个测试类:RegularExpressionTest,Exception作为一个测试套件进行测试:
@SuiteClasses参数为需要测试类的数组,可以使用{},将两个测试类传入。
测试套件类为空类,需要一个无参的public构造函数,使用默认构造函数即可。
运行结果如图,可以带到作为参数的两个测试类均运行,与单独测试一致。图2
7.参数化测试
为测试程序健壮性,可能需要模拟不同的参数对方法进行测试,如果在为每一个类型的参数创建一个测试方法,呵呵,人都疯掉了。幸好有参数化测试出现了。它能够创建由参数值供给的通用测试,从而为每个参数都运行一次,而不必要创建多个测试方法。注:测试方法(@Test注释的方法)是不能有参数的。
参数化测试编写流程如下:
a.为参数化测试类用@RunWith注释指定特殊的运行器:Parameterized.class;
b.在测试类中声明几个变量,分别用于存储期望值和测试用的数据,并创建一个使用者几个参数的构造函数;
c.创建一个静态(static)测试数据供给(feed)方法,其返回类型为Collection,并用@Parameter注释以修饰;
d.编写测试方法(用@Test注释)。
测试示例代码如下:
因为代码只测试日期格式,并未测试日期范围的正确性,2010-12-45这数值测试与期望值不符。
8.数组断言
JUnit4中添加了一个用于比较数组的新断言(Assert),这样不必使用迭代比较数组中的条目。
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected,Object[] actual)
JUnit4是向前兼容的,在JUnit4中依然可以使用JUnit3的测试代码,而不需要做任何改动。
JUnit测试框架将测试更加便捷和容易,编写测试代码也是简单、明了,但功能依然强大。
1.测试方法:
在junit4之前,测试类通过继承TestCase类,并使用命名约束来定位测试,测试方法必须以“test”开头。Junit4中使用注释类识别:@Test,也不必约束测试方法的名字。当然,TestCase类仍然可以工作,只不过不用这么繁琐而已。
Junit中还因JDK5而增加了一项新特性,静态导入(static import)。
2.固件测试
所谓固件测试(Fixture),就是测试运行运行程序(test runner)会在测试方法之前自动初始化、和回收资源的工作。JUnit4之前是通过setUp、TearDown方法完成。在Junit4中,仍然可以在每个测试方法运行之前初始化字段,和配置环境,当然也是通过注释完成。Junit4中,通过@befroe替代setUp方法;@After替代tearDown方法。在一个测试类中,甚至可以使用多个@Before来注释多个方法,这些方法都是在每个测试之前运行。说明一点,@Before是在每个测试方法运行前均初始化一次,同理@Ater是在每个测试方法运行完毕后,均匀性一次就是说,经这两个注释的初始化和注销,可以保证各个测试之间的独立性而互不干扰,他的缺点是效率低。另外,不需要在朝类中显示调用初始化和清除方法,只要他们不被覆盖,测试运行程序将根据需要自动调用这些方法。超类中的@Before方法在自来的@Before方法之前调用(与构造函数调用顺序一致),@After方法是子类中的在超类之前运行。
在JUnit4中加入了一项新特性。加入了两个注释:@BeforeClass和@AfterClass,使用这两个注释的方法,在该测试类中,的测试方法之前、后各运行一次,而不是按照方法各运行一次。对于消耗很的啊的资源,可以使用这两个注释。
3.异常测试
因为使用了注释特性,JUnit4测试异常非常的简单和明了。通过对@Test传入expected参数值,即可测试异常。通过传入异常类后,测试类如果没有抛出异常或者抛出一个不同的异常,本测试方法就将失败。见代码:
/** * */ package cn.hrmzone.junit; import java.io.File; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.SAXReader; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; /** * @author hrmzone.cn *2010-10-1 */ public class ExceptionTest { File f; Document doc; @Before public void init() { f=new File("output"+File.separator+"test.xml"); } @Ignore("not run") @Test(expected=DocumentException.class) public void read() throws DocumentException { SAXReader reader=new SAXReader(); doc=reader.read(f); } @Test(expected=ArithmeticException.class) public void divideZero() { int n=2/0; } }在第二个测试方法中,用0做除数,将会抛出ArithmeticException异常,所以对expected参数传入该类。测试抛出此异常,说明本次测试成功。如图:
测试成功后,方法前会出现一个小沟,大家可能注意到了,read()方法,代码中有一个奇怪的@Ignore注释,测试后也会出现一个标识。@Ignore注释表示忽略注释,运势测试类时,被@Ignore注释的方法将不会被测试,所以运行测试类后,会出行一个奇怪的标识。
4.超时测试
通过在@Test注释中,为timeout参数指定时间值,即可进行超时测试。如果测试运行时间超过指定的毫秒数,则测试失败。超时测试对网络链接类的非常重要,通过timeout进行超时测试,简单异常。如下例子:
/** * */ package cn.hrmzone.junit; import static org.junit.Assert.assertTrue; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Before; import org.junit.Test; /** * @author hrmzone.cn *2010-10-1 */ public class RegularExpressionTest { private String dateReg; private Pattern pattern; @Before public void init() { dateReg="^\\d{4}(\\-\\d{1,2}){2}"; pattern=Pattern.compile(dateReg); } // timeout测试是指在指定时间内就正确 @Test(timeout=1) public void verifyReg() { Matcher matcher=pattern.matcher("2010-10-2"); boolean isValid=matcher.matches(); // 静态导入功能 assertTrue("pattern is not match",isValid); } }
5.测试运行器
测试运行器:JUNit中所有的测试方法都是由它负责执行。JUnit为单元测试提供了默认的测试运行器,但是没有限制必须使用默认的运行器。自己定制的测试运行器必须继承自org.junit.runner.Runner。而且还可以为每一个测试类指定某个运行器:@Runwith(CustomTestRunner.class).在JUnit中,有两个高级特性会需要自定义运行器。
6.测试套件
JUnit4中最显著的特性是没有套件(套件机制用于将测试从逻辑上的分组并将这这些测试作为一个单元测试来运行)。为了替代老版本的套件测试,套件被两个新注释代替:@RunWith、@SuteClasses。通过@RunWith指定一个特殊的运行器:Suite.class套件运行器,并通过@SuiteClasses注释,将需要进行测试的类列表作为参数传入。
使用方法为:
a.创建一个空类作为测试套件的入口
b.将@RunWith、@SuiteClasses注释修饰这个空类;
c.吧Suite.class作为参数传入@RunWith注释,以提示JUnit将此类指定为运行器;
d.将需要测试的类组成数组作为@SuiteClasses的参数。
注意:这个空类必须使用public修饰符,而且存在public的无参构造函数(类的默认构造函数即可)。测试代码如下:将先前的两个测试类:RegularExpressionTest,Exception作为一个测试套件进行测试:
/** * */ package cn.hrmzone.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; /** * @author hrmzone.cn *2010-10-2 */ @RunWith(Suite.class) @SuiteClasses({RegularExpressionTest.class,ExceptionTest.class}) public class SuiteTest { }
@SuiteClasses参数为需要测试类的数组,可以使用{},将两个测试类传入。
测试套件类为空类,需要一个无参的public构造函数,使用默认构造函数即可。
运行结果如图,可以带到作为参数的两个测试类均运行,与单独测试一致。图2
7.参数化测试
为测试程序健壮性,可能需要模拟不同的参数对方法进行测试,如果在为每一个类型的参数创建一个测试方法,呵呵,人都疯掉了。幸好有参数化测试出现了。它能够创建由参数值供给的通用测试,从而为每个参数都运行一次,而不必要创建多个测试方法。注:测试方法(@Test注释的方法)是不能有参数的。
参数化测试编写流程如下:
a.为参数化测试类用@RunWith注释指定特殊的运行器:Parameterized.class;
b.在测试类中声明几个变量,分别用于存储期望值和测试用的数据,并创建一个使用者几个参数的构造函数;
c.创建一个静态(static)测试数据供给(feed)方法,其返回类型为Collection,并用@Parameter注释以修饰;
d.编写测试方法(用@Test注释)。
测试示例代码如下:
/** * */ package cn.hrmzone.junit; import static org.junit.Assert.assertEquals; import java.util.Arrays; import java.util.Collection; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; /** * @author hrmzone.cn *2010-10-2 */ @RunWith(Parameterized.class) public class ParameterTest { private String dateReg; private Pattern pattern; // 数据成员变量 private String phrase; private boolean match; // 使用数据的构造函数 public ParameterTest(String phrase, boolean match) { super(); this.phrase = phrase; this.match = match; } @Before public void init() { dateReg="^\\d{4}(\\-\\d{1,2}){2}"; pattern=Pattern.compile(dateReg); } // 测试方法 @Test public void verifyDate() { Matcher matcher=pattern.matcher(phrase); boolean isValid=matcher.matches(); assertEquals("Pattern don't validate the data format",isValid,match); } // 数据供给方法(静态,用@Parameter注释,返回类型为Collection @Parameters public static Collection dateFeed() { return Arrays.asList(new Object[][] { {"2010-1-2",true}, {"2010-10-2",true}, {"2010-123-1",false}, {"2010-12-45",false} }); } }运行结果如图:
因为代码只测试日期格式,并未测试日期范围的正确性,2010-12-45这数值测试与期望值不符。
8.数组断言
JUnit4中添加了一个用于比较数组的新断言(Assert),这样不必使用迭代比较数组中的条目。
public static void assertEquals(Object[] expected, Object[] actual)
public static void assertEquals(String message, Object[] expected,Object[] actual)
JUnit4是向前兼容的,在JUnit4中依然可以使用JUnit3的测试代码,而不需要做任何改动。
JUnit测试框架将测试更加便捷和容易,编写测试代码也是简单、明了,但功能依然强大。
- junit4.9b3.zip (1.6 MB)
- 下载次数: 7
发表评论
-
mysql中varchar类型转换Integer
2011-11-24 15:22 1274CAST(varchar字段 AS SIGNED) -
java 添加和清除cookie
2011-10-24 09:38 2093//添加cookie Cookie cookie = new ... -
java cookie操作
2011-10-24 09:34 1487Cookie概念: Cookie的格式实际上是一段纯文 ... -
java保留两位小数点(转)
2011-10-19 15:48 5725java保留两位小数问题: 方式一: 四舍五入 dou ... -
ibatis中批量删除
2011-09-15 10:27 1708Ibatis中批量删除方法: 方法一: 在映射文件中,按如 ... -
Java反射getFields()和getDeclaredFields()的区别
2011-09-05 13:23 1649Java反射 getFields()和getDeclaredF ... -
AES加密算法原理
2011-09-01 15:18 1747AES加密算法原理 随 ... -
Java AES加密实例
2011-09-01 14:30 3458package com.encrypt.hello; i ... -
Quartz任务中调用Spring容器中bean及动态调度任务
2011-08-31 15:09 19824Quartz 是开源任务调度框 ... -
Observer模式
2011-08-23 09:46 1039Java深入到一定程度,就不可避免的碰到设计模式(design ... -
Java环境下Memcached应用详解(转)
2011-08-22 10:05 0本文将对在Java环境下Memcached应用进行详细介绍。M ... -
Spring容器详解(转)
2011-08-22 09:53 1287我们在使用ssh整合项目的时候,Spring在其中是一个非常重 ... -
Spring DI(依赖注入) IOC(控制反转) AOP(面向切面编程)
2011-08-22 09:43 2130spring 的优点? 1.降低了 ... -
11款用于优化、分析源代码的Java工具
2011-08-08 15:13 898本文将提供一些工具, ... -
Java编程中影响性能的一些特点
2011-08-08 15:04 777文中将提供一些在Java编程中影响性能的一些特点,为了能够提高 ... -
Velocity基础
2011-08-08 11:01 1809Velocity 基础 Velocity是一个基于java的 ... -
java io经典例子
2011-08-03 14:45 1162IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入 ... -
JUnit4注解
2011-08-02 15:31 1023JUnit4注解 JUnit4的测试类不用再继承TestCa ... -
JUnit简明手册
2011-08-02 15:29 895用XP进行开发的过程,unit test是必不可少的环节。作为 ... -
CheckStyle配置及常见的输出结果
2011-07-26 16:22 2113Checkstyle是一款检查java程序代码样式的 ...
相关推荐
本教程将深入介绍JUnit4的一些核心概念,包括测试方法、固件测试(Fixture)、异常测试等。 首先,让我们来看测试方法的改变。在JUnit4之前,测试类需要继承`TestCase`类,测试方法必须以"test"开头。然而在JUnit4...
JUnit4 教程详尽 JUnit4 是 JUnit 框架有史以来的最大改进,其主要目标便是利用 Java5 的 Annotation 特性简化测试用例的编写。下面是对 JUnit4 的详细介绍: 一、Annotation 简介 Annotation 是 Java5 中引入的...
这个“Junit4电子教程 API”可能是针对如何有效地利用JUnit4 API进行测试编写的一份详细指南。在Java开发过程中,单元测试是确保代码质量、可维护性和可靠性的重要环节。JUnit4相比其前身JUnit3,引入了许多改进和新...
Junit4教程 Junit4是JUnit框架有史以来的最大改进,其中的主要目标便是利用Java5的Annotation特性简化测试用例的编写。在Junit4中,我们可以使用Annotation来描述测试用例,而不需要继承自TestCase类。下面我们将...
本文将详细探讨JUnit4的主要改进和关键知识点。 1. **Annotation的引入**: - 在JUnit4中,核心的改变是引入了Java5的Annotation特性。Annotation是一种元数据,它可以提供关于代码额外的信息,而这些信息可以在...
关于"浪曦JUNIT4笔记"可能涉及的内容,浪曦可能对JUnit4的使用提供了详细的教程或者最佳实践,包括但不限于如何组织测试类,如何使用Mockito进行模拟对象测试,以及如何利用TestNG或Spock等其他测试框架与JUnit4结合...
JUnit4引入了注解驱动的测试,简化了测试代码的编写。而在JUnit5中,进一步增强了这一特性,引入了诸如@DisplayName、@Nested等新注解,使得测试代码更易读,结构更清晰。教程将对比两者的异同,帮助开发者选择合适...
JUnit4引入了参数化测试,允许同一测试用例使用不同的输入数据执行多次。`@Parameterized`注解可以与`@Parameters`结合使用,将数据作为参数传入测试方法。 为了更高效地组织测试,JUnit支持测试套件(Test Suite)...
测试失败时,JUnit 会提供详细的失败信息,帮助开发者定位问题。 单元测试通常遵循以下原则: 1. **隔离性**:每个测试应该独立运行,不受其他测试的影响。 2. **可重复性**:每次运行测试,结果都应相同,除非...
在JUnit4中,`@Test`注解用于标识测试方法,而在JUnit5中,可以添加额外的属性如`expected`来指定预期的异常类型,或者`timeout`来限制测试方法的执行时间。 为了运行测试,你需要一个测试运行器。在命令行或IDE...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了强大的工具来编写和运行可重复的、可靠的测试代码。JUnit4是JUnit系列的一个重要版本,它引入了许多新特性,极大地提升了测试的效率和灵活性...
`junit3pro`目录下的内容则可能涵盖JUnit3.8.2的详细教程和实践案例,对比学习这两个版本可以帮助你理解单元测试框架的发展历程,以及如何根据项目需求选择合适的工具。 总之,这个学习资源将带你深入理解JUnit的...
`.CHM`文件是一种Windows的帮助文件格式,包含索引和搜索功能,可以帮助用户快速查找和学习JUnit 4.4和3.8.1的相关文档和教程。有了这个文件,开发者可以更加方便地学习和理解这两个版本的使用方法和API。 总之,...
这篇压缩包文件中的"Junit4教程.doc"文档,很可能是提供了一步步学习和实践Junit4的详细指导。 首先,我们需要理解什么是单元测试。单元测试是对软件中的最小可测试单元进行检查和验证,对于Java来说,这个单元通常...
本教程将详细介绍如何在Eclipse中使用JUnit4进行单元测试。 首先,你需要了解JUnit4的基本概念。JUnit是一个开源的Java测试框架,主要用于编写和运行针对Java代码的单元测试。在JUnit4中,测试用例以方法的形式存在...