您的位置:首页 > 其它

简单示例mock的使用 (Junit结合Jmock)

2011-11-28 13:48 996 查看
测试数据库时非常脆弱:数据的改变可能会影响测试的结果。

为目标的依赖创建桩(stub)或mock类是更好的解决方案。

可以使用jMock开源库来快速、简单的定义mock对象。(详细请查看:http://www.jmock.org)

stub:通常指的是目标接口的简单实现,他通常只响应对应的测试中的调用,起作用是为被测试的类创建必要的输入。

mock:是实际的实现对象,被测试的类会使用到他。

demo:利用Jmock

被mock的dao:

view
plaincopy
to clipboardprint?

package cn.partner4java.mock.dao;

import cn.partner4java.mock.bean.Hello;

public interface HelloDao
{

Hello
getById(Long helloId);

}

view
plaincopy
to clipboardprint?

package cn.partner4java.mock.dao;

import cn.partner4java.mock.bean.Hello;

public class HelloDaoImpl implements HelloDao
{

public Hello
getById(Long helloId) {

//这里面借助什么hibernate之类的,获取实体通过id

return null;

}

}

Service:

view
plaincopy
to clipboardprint?

package cn.partner4java.mock.service;

import cn.partner4java.mock.bean.Hello;

public interface HelloService
{

Hello
findById(Long helloId);

}

view
plaincopy
to clipboardprint?

package cn.partner4java.mock.service;

import cn.partner4java.mock.bean.Hello;

import cn.partner4java.mock.dao.HelloDao;

public class HelloServiceImpl implements HelloService
{

private HelloDao
helloDao;

public void setHelloDao(HelloDao
helloDao) {

this.helloDao
= helloDao;

}

public Hello
findById(Long helloId) {

//还额外添加了一些业务逻辑的操作,那么,我们测试的就是这部分业务逻辑操作

Hello
hello = helloDao.getById(helloId);

hello.setName(hello.getName()
+ "
!");

return hello;

}

}

编写testcase:

view
plaincopy
to clipboardprint?

package cn.partner4java.mock.test;

import org.jmock.Mock;

import org.jmock.MockObjectTestCase;

import cn.partner4java.mock.bean.Hello;

import cn.partner4java.mock.dao.HelloDao;

import cn.partner4java.mock.service.HelloServiceImpl;

public class HelloServiceImplTest extends MockObjectTestCase{

private Mock
mock;

private HelloServiceImpl
helloService;

protected void setUp() throws Exception
{

this.mock
= new Mock(HelloDao.class);

helloService
= new HelloServiceImpl();

helloService.setHelloDao((HelloDao)this.mock.proxy());

}

public void testFindById()
{

Long
id = 1L;

Hello
hello = new Hello();

hello.setId(id);

hello.setName("HelloWorld");

this.mock.expects(once()).method("getById").with(eq(id)).will(returnValue(hello));

Hello
helloS = this.helloService.findById(id);

System.out.println(helloS);

}

}

对web层进行单元测试

Spring在包org.springframework.mock.web中为Web应用所使用的接口提供了方便的桩实现。这个包具备了Servlet API桩对象的集合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: