用模板简化EasyMockTest

mock template
/**
* mock template
* @author Jomper
*
*/
public abstract class MockTemplate {
private Object[] mocks;

@Before
public void setUp() throws Exception{
mockFields(getClass(), this);
expectAll();
}

@Test
public void test() {
replay(mocks);
process();
verify(mocks);
}

/**
* reflect itself get annotate fields that dynamic assigned to mock objects
* @param clazz
* @param test
* @throws Exception
*/
private void mockFields(Class<?> clazz, Object test) throws Exception {
List<Object> _mocks = new ArrayList<Object>();
for (Field field : clazz.getDeclaredFields()) {
if (field.getAnnotation(Mock.class) != null) {
try {
field.setAccessible(true);
Object o = createMock(field.getType());
field.set(test, o);
_mocks.add(o);
} catch (IllegalArgumentException e) {
throw new Exception(e.getMessage(),e);
}
}
}
mocks = _mocks.toArray();
}

public abstract void process();

public abstract void expectAll();
}


测试模型:
/**
* Response interface
* @author Jomper
*
*/
public interface Response {
/**
* request handler
* @param request
* @return result
*/
public Object getResult(Request request);
}

/**
* Request interface
* @author Jomper
*
*/
public interface Request {
/**
* set request content
* @param o
*/
public void setRequest(Object o);
}

/**
* Service sample
* @author Jomper
*
*/
public class Service {
/**
* you can do something before get result
* initial response result and filter special characters from request content
* @param request
* @param response
* @return
*/
public Object execute(Request request, Response response) {
//TODO something before get result
return response.getResult(request);
}
}


测试实例
/**
* service test
* @author Jomper
*
*/
public class ServiceTest extends MockTemplate {
@Mock private Request request;
@Mock private Response response;
private Service service;

@Before
public void before() throws Exception{
service = new Service();
}

public void expectAll() throws Exception{
request.setRequest("a cup of tea");
request.setRequest("coffee");
expect(response.getResult(request)).andReturn("Sorry").andReturn("OK");
}

/**
* if request.setRequest("a cup of tea"),response.getResult(request) return "Sorry"
* else return "OK"
*/
public void process() throws Exception{
request.setRequest("a cup of tea");
assertTrue("Sorry".equals(service.execute(request, response)));

request.setRequest("coffee");
assertTrue("OK".equals(service.execute(request, response)));
}
}


这个是受了ajoo帖子的启发
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值