新足迹

 找回密码
 注册

精华好帖回顾

· 写点卖车经历,回国前最后为车版做点贡献 (2013-1-31) look2046 · 说说我的Camping装备和使用体会 (2011-10-10) 河水洋洋
· 澳洲海鲜图谱(13楼增加了Rick Stein's Seafood) (2008-4-14) patrickzhu · 你现在过的还好吗? (2008-11-20) youyuan
Advertisement
Advertisement
12
返回列表 发新帖
楼主:梦呓人

护法、金刚、散人、etc、etc: 讨论一下【Unit Test】VS 【Integration Test】 [复制链接]

发表于 2012-2-8 16:04 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 梦呓人 于 2012-2-8 14:35 发表




无视就是乱码兄??????


乱码 is gone and we are better off without him.

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2 !!!

查看全部评分

Advertisement
Advertisement

发表于 2012-2-8 18:31 |显示全部楼层
此文章由 mamahk 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mamahk 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 无视 于 2012-2-7 15:34 发表
那篇文章的作者肯定是没做过几天TDD,就乱发感慨,注重integration test不意味贬低unit test,作者显然扭曲了fake在unit test中的意义.

unit test它是在测试code本身逻辑上的健壮性,他的前提就是假设dependency是正常工作 ...


我想大家好像有点误会...

那篇文章一点也有没说 unit test 不重要的意思...

是LZ自己感觉integration test 比 unit test 更重要...再出题讨论

我对unit test跟integration test是看法喝水跟吃饭的关系,各有所需,unit test成本低,所以通常做得比较频密,integration test是通常要整个Environment才可成事..

发表于 2012-2-8 21:52 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 mamahk 于 2012-2-8 18:31 发表


我想大家好像有点误会...

那篇文章一点也有没说 unit test 不重要的意思...

是LZ自己感觉integration test 比 unit test 更重要...再出题讨论

我对unit test跟integration test是看法喝水跟吃饭的关系,各有所需 ...


那篇文章作者的确对Unit test很没有什么经验,一个劲在纠结denpendency不工作,有点杞人忧天了。

市面上流行的mocking framework比他想象的强大很多,他们不光可以stub dependency return的值,还可以throw任何exception来模拟dependency不工作的情况,这足以cover unit test对象的exception handling的能力,如果所测得logic没有try/catch block来吸收exception, 大多数unit test framework有expectexception这个attribute来verify异常抛出。所以不怕dependency不工作,就怕想不到,unit test测不到。

他只有一个观点我同意:Unit test green does not mean you can deploy. 不过基本上还是废话,有unit test能力的团队连个integration test都不作就release? automated integration如果没有,手工跑跑程序的能力还是有的,这也算是manual integration test,虽然不能全部涵盖COA的点,起码自己关心的关键feature还是应该工作的。

我个人觉得他自己最应该解决的问题就是让自己的code尽可能多的被unit testable,这不是很简单的事,可能会有超出想象的code refectoring.

我现在就在作commerce server的deprecation,原来的code有很好的dependency injection的能力,但都是把shopping cart作为reference type的参数传来传去作修改,而不是return,这几乎无法unit test,payment的逻辑没有unit test很惊人,同样令人沮丧。

[ 本帖最后由 无视 于 2012-2-8 23:49 编辑 ]

评分

参与人数 1积分 +2 收起 理由
+ 2 谢谢奉献

查看全部评分

发表于 2012-2-8 23:52 |显示全部楼层
此文章由 mamahk 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mamahk 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 无视 于 2012-2-8 21:52 发表


那篇文章作者的确对Unit test很没有什么经验,一个劲在纠结denpendency不工作,有点杞人忧天了。

市面上流行的mocking framework比他想象的强大很多,他们不光可以stub dependency return的值,还可以throw任何exception ...


文中不是说 dependency 不工作..."Unit tests are meant to kill dependencies" 是说, Unit testing是用黎抵消 dependency 对 testing 的影响...

传统 Behavioral testing 从结果来看待整个流程,是很难看出那里出问题...用文中例子, 假如因为 A 用着 B 的 feature, 当出问题时很难判断出是A还是B的问题...

而unit testing 是因为单独分开运行 A 和 B 的testing, 所以 test result 更有效反应出两个units的状况...而不会因为B fail 导致 A fail (dependency of B)...

文里所说都是 unit testing 的基本...跟你说unit testing的理由都是一样.

发表于 2012-2-9 00:44 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 mamahk 于 2012-2-8 23:52 发表


文中不是说 dependency 不工作..."Unit tests are meant to kill dependencies" 是说, Unit testing是用黎抵消 dependency 对 testing 的影响...

传统 Behavioral testing 从结果来看待整个流程,是很难看出那里出 ...


got your point.

文中所提Behavioral testing/integration test跟unit test比是不恰当的.如果unit test报错integration test不会进行,business owner的end-to-end test更不会进行,他们从process的角度不是一个级别的东西,当然目的也不相同。 如果这是他写这篇文章的初衷,从流程的角度站不住脚,或者只是为了比较而比较。

发表于 2012-2-9 07:52 |显示全部楼层
此文章由 cppbug 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cppbug 所有!转贴必须注明作者、出处和本声明,并保持内容完整
unit test 和 integration test 都非常重要,他可以使代码更加健壮并且在日后的开发中节省你很多时间。programmer每天修改代码,如果unit test fail 了,就可以立即将bug 暴露出来,然后要么修改代码,要么修改unit test (比如spec的更改造成business logic的更改)。虽然unit test 无法暴露所有的bug,但绝对可以有效的减少bug,这取决于你的unit test 的coverage,现在有一些tool可以帮助你自动生成test case,它可以节省你很多时间并且保证较高的coverage,做.net开发的可以看看pex,它会分析你的代码logic,然后生成有效的边界值test case, 这样你只需要写个template,就会有大量的test case被生成出来。

另外写unit test可以帮助refine你的设计,因为写unit test就是在不停的创建dummy object,你的设计好坏直接决定了创建dummy object的难易。其实即使设计的不好,强大的mock framework也可以帮助你创建dummy object,做.net的同学可以试试moles,它可以把大部分real object的function (static func, concrete class func, etc)通过runtime inject ,从而运行你自己的代码。
Advertisement
Advertisement

发表于 2012-2-9 09:27 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 cppbug 于 2012-2-9 07:52 发表
unit test 和 integration test 都非常重要,他可以使代码更加健壮并且在日后的开发中节省你很多时间。programmer每天修改代码,如果unit test fail 了,就可以立即将bug 暴露出来,然后要么修改代码,要么修改unit test (比 ...


没有在商业级别用过pex/moles,如果说错了请纠正我一下。

我感觉pex/moles并不鼓励code to interface也能做unit test,这是unit test这个领域的异类之一,从programming本身的角度来说这跟业界倡导的流行趋势不符,业界有不少情况手工extend class/delegate来克服protected/internal的限制,让他们unit testable,这个倒是比较普遍。

不过pex检查边界值给出的test case还是很不错的,在coding的过程中可以用。

[ 本帖最后由 无视 于 2012-2-9 11:43 编辑 ]

发表于 2012-2-9 20:46 |显示全部楼层

回复 无视 37# 帖子

此文章由 cppbug 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cppbug 所有!转贴必须注明作者、出处和本声明,并保持内容完整
虽然我没有完全got your point,但还是简单说说我的想法。我感觉moles framework并没有明确排斥code to interface,它提供的stub type的本质跟传统的mock framework差别不大,需要class有良好的设计,依赖于interface(virtual func),否则要进行refactor。stub type的优点是overhead小,但在某些情况下可能并不可行,或者说成本以及风险都很大,公司通常不会take这个risk。最开始moles吸引我的是它的runtime instrument,也就是可以对任何sealed class function,static function,property直接进行runtime injection,这样就不需要对现有的类库进行extend或refactor,但却可以控制他们的行为,虽然效率上有点损失,但却降低了风险,节省了时间。

我也感觉pex很棒,绝对值得一试。感兴趣的同学可以去http://www.pexforfun.com/ 玩玩看。另外据说pex/moles将会加入到下个版本的visual studio中,不知道是真是假。

发表于 2012-2-15 16:51 |显示全部楼层
此文章由 捉五龙 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 捉五龙 所有!转贴必须注明作者、出处和本声明,并保持内容完整
各位大佬给推荐几本unit test方面的经典书吧

发表于 2012-2-16 11:42 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 捉五龙 于 2012-2-15 16:51 发表
各位大佬给推荐几本unit test方面的经典书吧



这本书还行,但作者不太招人喜欢。

http://www.amazon.com/Art-Unit-T ... 29352585&sr=8-1

也不用看的特别仔细,理解stub跟mock的区别就可以开工了.

[ 本帖最后由 无视 于 2012-2-16 11:43 编辑 ]

评分

参与人数 2积分 +6 收起 理由
梦呓人 + 2 !!!
atransformer + 4 感谢分享

查看全部评分

发表于 2012-2-20 13:24 |显示全部楼层

回复 无视 40# 帖子

此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
左护法,Rhino Mocks是不是现在常用的Mock Framework?
Advertisement
Advertisement

发表于 2012-2-20 13:55 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 梦呓人 于 2012-2-20 13:24 发表
左护法,Rhino Mocks是不是现在常用的Mock Framework?


嗯,用户不少,是个不错的framework,但如果你做asp.net mvc的话,moq也很好

http://code.google.com/p/moq/

评分

参与人数 1积分 +2 收起 理由
梦呓人 + 2 哥永远都在小弟心中!

查看全部评分

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部