测试数据库时非常脆弱:数据的改变可能会影响测试的结果。
为目标的依赖创建桩(stub)或mock类是更好的解决方案。
可以使用jMock开源库来快速、简单的定义mock对象。(详细请查看:http://www.jmock.org)
stub:通常指的是目标接口的简单实现,他通常只响应对应的测试中的调用,起作用是为被测试的类创建必要的输入。
mock:是实际的实现对象,被测试的类会使用到他。
demo:利用Jmock
被mock的dao:
- package cn.partner4java.mock.dao;
- import cn.partner4java.mock.bean.Hello;
-
public interface HelloDao
{ -
Hello
getById(Long helloId); - }
- 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:
- package cn.partner4java.mock.service;
- import cn.partner4java.mock.bean.Hello;
-
public interface HelloService
{ -
Hello
findById(Long helloId); - }
- 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;