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帖子的启发
分享到:
相关推荐
课程报告模板 简化.docx
PHP模板简化网站设计的研究.pdf
苹果cms海螺主题模板简化版安装教程
说明( 这次直接简化起来 直接下载cms源码+模板主题导入即可) 第一步:下载好苹果CMS源码 第二步:下载模板主题 导入根目录 第三步:登录网站后台—–自定义菜单配置里面添加:海螺主题设置,/admin....
nodestream, 通过模板简化实时应用 NodestreamNodestream目的是通过将事件侦听器连接到模板呈现,以便实现实时web应用程序的最常用用例。示例用例考虑下面的例子,用表达式。 以下两个路由分别显示和保存项目app.get...
EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 EPLAN 模板 ...
易语言模板 易语言模易语言模板 易语言模板 易语言模板板 易语言模板易语言模板 易语言模板 易语言模板
深度学习工程模板,简化加载数据、构建网络、训练模型和预测样本的流程
以前经常用VC编程的时候写的一个线程模板类 可以以类的任何方法作为线程过程启动 之后作为了简化 约定方法必须无返回值 且无参数 thread h总共30多行代码 下载者可随意修改 复制 希望对大家有用 用法示例: #...
深度学习工程模板,简化加载数据、构建网络、训练模型和预测样本的流程
简历模板简历模板简历模板简历模板简历模板
jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp模板jsp...
Visio 是一种图表工具,通过使用该新式模板,可轻松直观地创建流程图、图表、组织结构图、平面图、工程设计等。 压缩包包含SDLC 瀑布流程模板、基本流程图模板、建筑平面流程图模板、库存管理流程图模板、跨职能流程...
简化使用Keras构建和训练深度学习模型的项目模板
3000份ppt模板PPT模板.txt3000份ppt模板PPT模板.txt3000份ppt模板PPT模板.txt3000份ppt模板PPT模板.txt3000份ppt模板PPT模板.txt3000份ppt模板PPT模板.txt3000份ppt模板PPT模板.txt3000份ppt模板PPT模板.txt3000份...
在现代办公中,表格模板是常用工具之一,因为它能够提高效率,简化工作流程,并且有助于实现一致的数据收集和整理。本文将介绍各种办公模板,包括申请表格模板、工作表格模板、记录表格模板和报告表格模板,以及它们...
按下“预览”按钮即可进行预览,而单击某个模板名称,就会显示“模板最终许可协议”,在接受协议后单击“在PowerPoint中编辑”,IE就会将模板下载到你的硬盘中,并会自动用PowerPoint打开该模板。如果你对模板的效果...
三种模板匹配例子, 有普通轮廓, 按区域重新生成简化图片创建模板.然后匹配. 非常复杂的轮廓简化.再按像素点支比对
简化的模板横截面定义了用于希格斯测量中运动学信息的测量和传播的框架。 我们对W H生产的6维有效场论算子进行了分析,对当前提出的装置进行了基准测试。 计算Fisher信息使我们能够量化该框架对新物理学的敏感性,并...