使用工厂方法mock测试方法体内中new出来的对象
来源:互联网 发布:水果软件 9.0中文版 编辑:程序博客网 时间:2024/06/06 13:04
使用工厂方法mock测试方法体内中new出来的对象
转 http://strongzhu.iteye.com/blog/1130414
工厂方法重构jmock
本文假设读者已了解mock的基本定义,基础使用场景。本文的mock框架采用jmock
1、mock经典测试场景
- class ToTest {
- private Member m;
- public void test(Varible v){
- m.call();
- v.call();
- }
- }
class ToTest { private Member m; public void test(Varible v){ m.call(); v.call(); }}
通过mock出一个m和v,并对其行为进行预测,就可以对ToTest.test()进行单元测试
2、本文关注的问题为以下使用场景
- Class ToTestA{
- public int test(){
- SomeClass s = new SomeClass();
- s.call();
- }
- }
Class ToTestA{ public int test(){ SomeClass s = new SomeClass(); s.call(); }}
这样的情况下,如何才能对ToTestA.test()进行有效的单元测试。
笔者碰到的情况不是这么简单,因为还涉及到将类名存储到数据库,然后进行反射拿到类的实例,但是问题和上述基本一致。
3、解决办法
构造一个factory,使用factory method构造对象。
- Class Factory{
- public SomeClass build(){
- return new SomeClass();
- }
- }
Class Factory{ public SomeClass build(){ return new SomeClass(); }}
新的ToTestA实现
- Class ToTestA{
- Factory f = new Factory();
- public int test(){
- SomeClass s = f.build();
- s.call();
- }
- }
Class ToTestA{ Factory f = new Factory(); public int test(){ SomeClass s = f.build(); s.call(); }}
那么被测试的模型就成功转换为Class ToTest,能够满足mock的要求
4、评价
缺陷:需要先对源代码进行改造后才能继续重构,并且产生新的类
优势:在对主逻辑进行重构前可以写出能跑的测试用例
- 使用工厂方法mock测试方法体内中new出来的对象
- TDD Tip:方法内部New出来的对象如何Mock
- Mockito 中捕获 mock 对象方法的调用参数
- JMockit 中捕获 mock 对象方法的调用参数
- 使用Spring Mock测试Action中的方法
- 阻止类被new出来的方法
- JMockit使用:mock一个类的方法
- 使用Jmockit完成static方法的mock
- jmockit mock 方法内创建对象的方法调用
- 抽象工厂模式:简单工厂模式、工厂方法模式对比;在工厂方法模式中使用反射创建对象实例
- spring web应用中new出来的Bean实现属性注入的方法
- 工厂模式解决如何不通过new来创建实例对象的方法
- PHP中new出来的对象和 clone复制出来的对象
- Js中调用new方法生成对象的过程
- 用powermock 方法中new对象
- Mock的基本概念和方法
- 用构造方法构建对象时使用new关键字和不使用new关键字的差别
- JavaScript使用工厂方法创建对象
- 防止jQuery ajax Load使用缓存的方法
- MTK调试的奇淫技巧
- SQL Server索引管理之六大铁律
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- 电源管理新技术--动态功率路径管理(DPPM)
- 使用工厂方法mock测试方法体内中new出来的对象
- 程序员进阶
- 面试(2012-4-17)
- TileCache 2.0 安装与配置
- 张作霖用人逸事
- Visual Studio 2008 Toolbox里控件消失(#13119)的问题
- 【redhat5.5】ftp服务的ftpusers黑名单分析
- SQL Server视图管理中需要遵守的四个限制条件
- 1.1 MFC 文档视图结构程序结构总揽