`
fantasy
  • 浏览: 515445 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

单元测试利器之Jtester

    博客分类:
  • Java
阅读更多

名词解释:

  • Junit:众所周知的单元测试。 官方网址:http://junit.sourceforge.net/。Junit从4.0开始提供基于注解的配置方式。
  • Dbunit: 一个针对数据库测试的框架,通过Excel准备数据并插入数据库。官方地址:http://www.dbunit.org/
  • TestNG:从字面上可以理解为下一代单元测试,和Junit的功能有一部分重叠和区别。TestNG也有Eclipse插件,官方地址http://testng.org/doc/index.html
  • Unitiles: 让单元测试变得更加容易和可维护,Unitils构建在DBUnit之上并与JUnit和TestNG相结合。官方地址:http://www.unitils.org
  • Jmock:JMock是一个JAVA开发包,它支持Mock(模拟)对象机制的TDD(测试驱动开发),官方地址:http://www.jmock.org/


什么是Jtester?
jTester是一个基于java的单元测试框架。开源地址:http://code.google.com/p/java-tester/

为什么要用Jtester?

JTester是站在众多巨人肩膀上的单元测试框架,集成了Junit4.5,dbunit2.4.3,unitils2.2,JMOCK2.5和TestNg5.1这些优秀的开源框架,并在这些框架上做了扩展,使得单元测试更加方便和强大。

Jtester带给了我们什么?

1、在unitils的基础,集成了jmock功能
2、在hamcrest断言的基础上,实现了fluent interface断言
3、改造了jmock expectation参数断言为fluent interface形式
4、录制对象:提供了将普通的pojo对象序列化到文件,然后再从文件中反序列化回来的功能,用于在对象复杂的情况下,直接录制接口(远程接口)调用返回的对象,以供下次测试或调试使用。
5、数据测试:使用wiki代替xml来准备测试数据。比dbunit更快准备数据。
6、实现了更加丰富的断言。比junit的断言多。
7、提供了hibernate annotation环境下,直接使用内存数据库进行db测试。
8、提供了hibernate annotation环境下,Open Test in Session的实现。
以上8大特性来自于官方,我稍加了点说明和整理。 

 
七步进入Jtester世界。 下面让我们花一个泡面的时间来学习下Jtester吧。

import mockit.NonStrict;

import org.jtester.testng.JTester;
import org.jtester.unitils.jmockit.MockedBean;
import org.testng.annotations.Test;
import org.unitils.spring.annotation.SpringApplicationContext;
import org.unitils.spring.annotation.SpringBean;

/**
 * Jtester测试例子,按照注释顺序学习
 * 
 * @author tengfei.fangtf
 */
@SpringApplicationContext( { "applicationContext.xml" })
// 1.@SpringApplicationContext:加载Spring 配置文件,所有测试相关的bean都在这个容器中;
public class BusinessTestCase extends JTester// 2.JTester:要使用JTester
// 提供的功能,需要继承此基类;
{

	@SpringBean("businessService")
	// 3.@SpringBean:从容器中取出指定id 的bean 并注入到测试类中
	private AppInternalService businessService;

	@MockedBean
	@NonStrict
	// 4.@Mocked @MockedBean:mock 出一个对象,并将该对象与Spring 容器结合,实现Autowired;
	private OneHessianServiceClient hessianClient;

	@Test(groups = { "FirstTestGroup" })
	// 5.@Test;TestNG 的注解;指明此方法为一个TestCase;
	public void testBusinessNormal() {
		new Expectations() {// 6.设置mock 对象的期望返回值
			{
				hessianClient.hessianServiceInvorke(anyString);
				result = "HH";// 那么执行这个方法,永远都返回HH
			}
		};

		String returnResult = businessService
				.bussinessService("Sample Business!");
		System.out.println("\n ---> " + returnResult);// 输出HH
		want.string(returnResult).notNull();// want:JTester 框架提供的强大的断言;
	}

}

 

分享到:
评论
14 楼 甄子丹 2011-02-12  
Willam2004 写道
skydream 写道
@SpringApplicationContext( { "applicationContext.xml" })

spring bean都出来了,还是“单元测试”吗?


恩,这个主要测试用于基于spring开发的应用,单元测试的对象实例化是由spring容器来做,而jtester可以通过注解的方式方便加载spring配置文件。节省了一定的编码量。


Spring-test这些功能都有,无非就是一个标注的差别,spring-test用的@ContextConfiguration
13 楼 Willam2004 2011-02-12  
skydream 写道
@SpringApplicationContext( { "applicationContext.xml" })

spring bean都出来了,还是“单元测试”吗?


恩,这个主要测试用于基于spring开发的应用,单元测试的对象实例化是由spring容器来做,而jtester可以通过注解的方式方便加载spring配置文件。节省了一定的编码量。
12 楼 Willam2004 2011-02-12  
skydream 写道
有点迷惑,到底是Jmock还是Jmockit? 虽然只是几个字母的差别,但是这是两个完全不同的东西。还是说两个都在用?


jtester两个都有用,对其进行了封装和扩展。
11 楼 zouzou 2011-02-12  
JTester没有接触过
10 楼 skydream 2011-02-12  
有点迷惑,到底是Jmock还是Jmockit? 虽然只是几个字母的差别,但是这是两个完全不同的东西。还是说两个都在用?
9 楼 skydream 2011-02-12  
@SpringApplicationContext( { "applicationContext.xml" })

spring bean都出来了,还是“单元测试”吗?
8 楼 demonkind 2011-02-11  
好东西,先收了。
7 楼 ka520888 2011-02-11  
写得不是很详细,光看上面一个例子对于没接触过的新人来说还是有一定难度
6 楼 Willam2004 2011-02-09  
maltose 写道
这个不是一个组织吧?


不是,jtester是一个测试框架,基于jmockit和testng,junit等测试框架,进行了封装和扩展。提供更方便的mock机制,以及更方便的断言方式等。
5 楼 maltose 2011-02-09  
这个不是一个组织吧?
4 楼 fengjia10 2011-02-07  
Jtester的Mock章节参看Jmockit,资料可以查看http://fengjia10.iteye.com/blog/798066
3 楼 fantasy 2011-02-05  
yuanhongp 写道
新手,学习中,但是还是没有看明白说的是什么

哪里不明白?能详细说说吗?
2 楼 yuanhongp 2011-02-05  
新手,学习中,但是还是没有看明白说的是什么
1 楼 Willam2004 2011-02-04  
@NonStrict  

这个是@Mocked的替代注释么?

相关推荐

Global site tag (gtag.js) - Google Analytics