锁定老帖子 主题:单元测试如何应对以下2个简单的情况
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-06-07
你自己都new了,还指望人家测试类怎么给你mock?
重构才是正道 |
|
返回顶楼 | |
发表时间:2006-06-07
ok,现在的问题就是如何重构?
|
|
返回顶楼 | |
发表时间:2006-06-08
lzqjj 写道 ok,现在的问题就是如何重构?
写一个setter方法,然后注入mock对象就ok了 why not? |
|
返回顶楼 | |
发表时间:2006-06-08
我的做法:
1)首先这个变量从局部变量改为成员变量; 2)提供一个 setter 设置这个成员变量; 3)在需要使用这个成员变量的地方,判断这个变量是否为 null, 如果为 null 就构建一个(当然你可以使用一个 get 方法来隐藏这段逻辑); 这样在单元测试的时候我们可以 set 进去这个依赖对象(可以是我们 Mock 出来的伪造对象), 而正常运行的时候就保持和原来逻辑一致; 当然这个方法只是权宜之计. |
|
返回顶楼 | |
发表时间:2006-06-08
to:glassprogrammer
非常感谢你的回答。我的想法和你一模一样(特别是第3条)。只是有些不太确定的地方: 1、变量从局部升级成为了成员变量,这样会有什么负面影响吗?极端情况下,我只有一个方法需要这个变量。 2、对于你的第3条回答,我也是首先判断这个变量是否为null,如果是,则才直接new一个,否则,直接使用这个变量。这样做的目的确实是方便了单元测试的setter注入。不过你说这个只是权宜之计,不知道除了这种方法外,还有什么其它更好的办法?? 3、延伸开来,是不是尽量尽量不要直接new一个对象? |
|
返回顶楼 | |
发表时间:2006-06-08
只有一个方法需要就传给那个方法
尽量不要直接new一个对象,除了内部类 运用之妙,存乎一心 |
|
返回顶楼 | |
发表时间:2006-06-09
“只有一个方法需要就传给那个方法”---???如何传给方法???
|
|
返回顶楼 | |
发表时间:2006-06-09
OtherClass oc = new OtherClass();; 改成 OtherClass oc = OtherFactory.getFactory();.getOtherClass();; 这样就很容易mock了。 |
|
返回顶楼 | |
发表时间:2006-06-09
lzqjj 写道 “只有一个方法需要就传给那个方法”---???如何传给方法???
由调用那个方法的对象实例化它,再作为参数传给那个方法啊,这有什么问题吗?还是我理解错你的意思了? |
|
返回顶楼 | |
发表时间:2006-06-09
LZ,推荐看一看gigix翻译的"重构"
Author:Martin Flower |
|
返回顶楼 | |