时间很长;现在很短;距离很长;相遇很短
Friday September 10th 2010

Posts Tagged ‘unittest’

说一下EasyMock

用了很长的时间,终于写出了合乎标准的单元测试。好吧,我就是做事情不够细致,所以才这么大费周折。。。

关于测试

  1. 做测试者,一定要弄清出不同种类测试的分别,弄清楚什么是Unit Test,什么是Intergration Test, Perfermance Test, Function Test. 不然,就相当于没有测试。
  2. Unit Test是程序员完成,Intergration Test通常也是程序员。而Perfermance Test和Function Test则应当由专业的QA人员去做,当然如果有人多才多艺全部完成,那没有问题。
  3. 验收测试Validation Test 应当由用户按照SOW定义完成,当然,这也是理想的情况——我们有清晰的需求,严格控制的变更。应用XP的场合,这更多应当是庆功宴前的走形式。

为什么这么关心测试

  1. 测试是开发的标杆,里程碑,没有测试,就没有提交件。
  2. 测试是风险管理的最直接手段,良好的测试体系和执行力是软件项目中重要的技术性保障手段。
  3. 测试保证项目的完成,在项目发生变更时控制风险。

Martin Fowler写过一个故事 TestCancer ,描述了一个结构精巧,测试完美的应用如何生病而无可就要的。而我们一旦一时一刻放弃这些准则,就会陷入无以复加的尴尬境地,所以,在动手写代码前,特别是所谓的高级人员,先打好基本功,您的一个轻率决定,或者经验之谈,就会让整个团队陷入MASS.

关于EasyMock

使用了EasyMock感觉不错,就着代码说说使用中遇到的两个问题:

问题1 没有设置返回值

java.lang.IllegalStateException: missing behavior definition for the preceeding method call findByExample(<any>)

对于有返回值的方法,要设定预期返回值。

	@Test
	public void testRegist() {
		User user = new User();
		user.setUserId("testUser");
		user.setPassword("password");
		//下面这行代码去掉 .andReturn(null)就会报上面的错误。
		expect(mock.findByExample(anyObject())).andReturn(null);
		expect(pwe.encodePassword(eq(user.getPassword()), anyObject()))
				.andReturn("password");
		expect(mock.save(anyObject())).andReturn(1);

		replay(mock);
		replay(pwe);

		userService.regist(user);
	}

问题2 参数匹配问题

java.lang.IllegalStateException: 2 matchers expected, 1 recorded.

对于EasyMock会对传入Mock对象方法中的参数进行比较,也就是调用equals或者==引用比较等等。如果不能正确设置比较的行为,就会造成参数不匹配。EasyMock提供了一些方法来定义如何匹配参数,请参考
EasyMock文档

 @Test
 public void testJoinGame() {
 	Game expGame = new Game();
 	expGame.setId(1);
 	expGame.setCreateUser(new User());
 	expGame.setGameStatus(GameStatus.NOT_START);
 	expGame.setPlayer(new ArrayList());
 	//这行代码如果写成
 	// expect(publicDao.get(Game.class, anyLong())).andReturn(expGame);
 	//就会出现前文的错误
 	expect(publicDao.get(eq(Game.class), anyLong())).andReturn(expGame);
 	publicDao.update(expGame);
 	replay(publicDao);
 	gameService.joinGame(1, new User());
 	verify(publicDao);
 }

JUnit单元测试与集成测试指引

基于JUnit 3.8 与Spring 1.2环境的测试方法

本文将介绍使用JUnit结合Spring进行单元测试和集成测试的一般方法,并探讨基本的测试最佳实践,希望能够协助大家提高代码质量。本文属于介绍性质,文后附有相关书目,可以系统的了解xUnit框架详细的知识。

文中源码供参考使用。

和本站所有文章一样,使用非商业性-署名-内容一致 有限保留版权,请参看创作共享协议3.0版本

文章和源代码下载:http://lazing.ave7.net/” title=”JUnitå

Latest Topics

光打雷不下雨

光打雷不下雨

最近诸事纷杂,熬夜加班不断,不过没有任何产出…… 悲剧~ Good [Read More]

30YEAR

30YEAR

今天是深圳特区30周年庆祝大会; 于是今天下班全市大堵车; [Read More]

iPad充电

iPad充电

iPad充电是一件诡异的事情~ 总结一下:1A的变压器是不行的,要2.1A的 [Read More]

mac|iOS|apns|php

mac|iOS|apns|php

啥都不说了,明天背着mac去公司学写iOS程序去。。 顺便推荐很有诚意的财经媒体的RSS [Read More]

iWork套件与Microsoft Office兼容性的问题

iWork套件与Microsoft Office兼容性的问题

用了MacBook,一定要用MacOS; [Read More]

Recent Comments

E had this to say

Read the post

继续说Apache的优化 | Himmel had this to say

Read the post

性能调优:MySql Server at Linux | Himmel had this to say

« The War of SQL 继续说Apache的优化 Read the post

安静一点 | Himmel had this to say

« RESTful Ave7.net 某咖啡店照片 Read the post

某L had this to say

没用的,那种也不是没有丢过…… 规律的生活与我无缘 Read the post