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 通过分析提供的文件信息,我们可以总结出以下知识点: 1. 电子制图报告的组成部分:电子制图报告通常包括电路图各部分原理分析、图纸绘制过程、绘图能力的收获与体会等部分。 2. 电路...
苹果cms海螺主题模板简化版安装教程
### 苹果CMS海螺主题模板简化版安装教程 #### 安装背景与意义 苹果CMS是一款非常流行的视频网站管理系统,被广泛应用于搭建在线视频播放平台。海螺主题作为其一款美观且实用的主题模板,受到了许多用户的青睐。...
nodestream, 通过模板简化实时应用 NodestreamNodestream目的是通过将事件侦听器连接到模板呈现,以便实现实时web应用程序的最常用用例。示例用例考虑下面的例子,用表达式。 以下两个路由分别显示和保存项目app.get...
为了简化这些复杂的过程,开发者们经常使用模板来提高效率和可复用性。本篇文章将深入探讨如何利用Python进行深度学习工程,并以"Python-深度学习工程模板简化加载数据构建网络训练模型和预测样本的流程"为主题,...
这个项目以"Ajax天气预报案例(使用模板引擎渲染).zip"为标题,提供了从基础到实践的教程,适用于初学者快速上手了解Ajax和模板引擎的运用。 首先,我们要理解Ajax的核心概念。Ajax(Asynchronous JavaScript and ...
该项目是一款基于Python的PyTeX LaTeX模板编写工具,旨在简化LaTeX文档的编写过程。该项目包含86个文件,主要包括71个Python源码文件、10个Markdown文件、1个YAML配置文件、1个许可证文件、1个LaTeX类文件、1个参考...
模板系统是Winhex的一个强大特性,它简化了复杂数据的解析和分析过程。例如,其中包括了101项常见的WinHex模板,这些模板涵盖了各种常见的数据格式,如硬盘SMART信息、BIOS固件、日志文件、图像文件、文档文件头等。...
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...
在Zabbix中,模板是预定义的一组配置项,用于简化设备监控的设置过程。"Zabbix 模板 H3C交换机通用模板"就是为H3C(Huawei 3Com)交换机设计的一种模板,目的是方便快速地配置Zabbix以监控这些交换机的关键指标。 H...
总之,这30个Access模板不仅提供了即插即用的数据库解决方案,同时也是一份宝贵的学习资料,让用户能够深入理解和掌握Access的各种功能,从而提升数据库管理技能。无论是初学者还是经验丰富的用户,都能从中受益。在...
以前经常用VC编程的时候写的一个线程模板类 可以以类的任何方法作为线程过程启动 之后作为了简化 约定方法必须无返回值 且无参数 thread h总共30多行代码 下载者可随意修改 复制 希望对大家有用 用法示例: #...
使用这些模板,开发者可以快速搭建起一个美观且功能完善的网站。在实际应用中,开发者可能会根据项目需求对模板进行调整,添加自定义功能,或者替换特定部分以满足特定品牌或设计规范。 总结来说,网页模板是现代...
4. **在线LaTeX编辑器**:如Overleaf,提供了一个实时协作和预览的平台,用户可以在网页上直接编写LaTeX代码,无需安装任何软件,大大简化了LaTeX的使用过程。 5. **论文结构**:典型的IEEE论文结构包括标题、作者...
* 简化数据库管理:使用模板可以简化数据库的管理,管理员可以更方便地管理和维护数据库。 Lotus Notes 6 附带的模板 Lotus Notes 6 附带了许多实用的模板,以下是一些常见的模板: * ALOG4.NTF:代理日志模板 ...
总的来说,网站模板极大地简化了网站开发过程,让不具备深厚技术背景的用户也能快速创建出美观、功能丰富的网站。通过理解模板的工作原理和如何利用提供的压缩包文件,我们可以更高效地利用这些资源,为自己的网站...
这样的模板通常包含各种题型(如选择题、填空题、简答题等)、分数分配、版面设计以及必要的说明部分,旨在简化教师或管理员的工作流程,提高效率。 在描述中提到的"试卷模板很好用",这意味着模板具备以下特点: 1...
ASP.NET 模板引擎,如jntemplate,是.NET开发者常用的一种工具,它极大地简化了网页和各种文本生成的工作流程。这种模板引擎的核心思想是将显示逻辑与业务逻辑分离,使得设计人员和开发人员可以各自独立地进行工作,...
"solidworks文件模板.zip"提供了一组模板,这些模板简化了新设计的初始化步骤,使用户能够快速地进入设计阶段,节省了重复设置的时间。 二、模板分类 压缩包中的"solidworks文件模板"可能包括以下几类: 1. 零件...
模板引擎是ThinkPHP5中的重要组成部分,它允许开发者使用简单的语法编写视图层代码,将数据和HTML分离。这些130套模板源码涵盖了各种类型的企业网站需求,包括但不限于:企业简介、产品展示、新闻资讯、案例展示、...