只显示主题贴

Friedrich 写道我更早,小学一年级,上世纪80年代的时候,哈哈 几条常用的LOGO命令现在还记得 小学的时候,有一老师威逼利诱,说Logo好啊,你看,学BASIC的只有一张盘,LOGO有两张...我坚定地选择了不贪社会主义软盘...可是人算不如天算啊,哪位老大最后是我高中的计算机辅导老师...
这个东西用amb最合适了: class Sudoku def initialize @square = Array.new(9) { Array.new(9) {0} } @amb = Amb.new end def find_sudoku 9.times do |row| 9.times do |col| candidate = @amb.choose(*range) @square[row][col] = 0 @amb.assert(count_in_ ...
taowen 写道view是如何得出来的,不是本帖的重点。我当然可以把你所说的两个步骤给隐匿掉。 哎...过程是重要的...没有过程就看出不来哪里做了决策,也就没有办法理解你这里为啥要用mock。如果按我上面列出的过程,看不出有用mock的必要,因此也就不用指责什么了。 个人意见觉得这里你硬说是mock的复杂有点论据不足。
taowen 写道用真实的view来测,用mock框架造一个来测,自己手写一个假的来测。三者没有谁推出谁的关系。我只是要说明一,在这里用MVP没有你说的过度设计的问题。二,这里用mock框架很笨拙。 对于你提到的设计步骤的问题。我同意你的看法。下次写代码的时候会注意用小步骤前进。最终的view接口是这样的没有什么问题吧?难道小步骤TDD会出现另外一个版本的view接口? 呵呵,我没说MVP是过渡设计,我说的是View interface...毕竟我受不了上来就一个接口...怎么也得有两个实现类吧...
taowen 写道 如果不用反射,很多控件的事件是很难触发的。所以才会有一个view接口出现。之所以有这个view接口出现是因为TDD,而不是因为不TDD。 嘿嘿,同学,但是你也没在View上定义出发的方法啊,如果你说TDD出来,用一个interface来做placeholder,那么也好,至少第一步代码是这样的 public void testShouldXXX() { View view = createView(); //空方法,不考虑实现 new Present(view); view.clickButton(); assertEqauls("Hello", ...
taowen 写道to raimundox: 但是实际情况中,比如view是Windows Forms,你拿到了button也是无法click的,因为button控件没有提供这个方法。所以很多时候应用MVP就是让界面上的代码可测试。所以才会有MockView的出现。 再ps一下,WinForms里不能掉Click吗?Click事件不是一个delegate吗?对于这个例子难道不可以 view.buttom.Click(DUMMY_SENDER, DUMMY_EVENT_ARGS) ? 当然我对.net没啥了解,这个是瞎猜的...
taowen 写道to raimundox: 我明白你的意思。就是没有两个相似的具体的view的情况下,不需要一个抽象的view。也就是说不要一上来就套什么MVP。也就是说你认为使用MVP的唯一原因是因为View要可替换。但是实际情况中,比如view是Windows Forms,你拿到了button也是无法click的,因为button控件没有提供这个方法。所以很多时候应用MVP就是让界面上的代码可测试。所以才会有MockView的出现。 嘿嘿,这个我可没说。通篇我都没讨论MVP,我说的是Mock。我想说的是: 如果你按照TDD的方法来作,起码不会这么早就出现一个View interfac ...
taowen 写道to raimundox: 这样的写法实际上就是把一个序列的两个动作分开做了。我先测试addActionListener被调用了。然后再调用Listener的actionPerformed的逻辑是正确的。我不知道这样做好不好。你也可以说把这两个放在一起测是功能测试。所以我认同你的说法。拿mock框架放到做功能测试的场景下,不适合。这个是显而易见的。因为mock框架造出来的对象无法持有状态。 to firebody: MVP模式的状态在view上,把listener放到presenter上是不行的。你的观点和raimundox一样,也就是只针对listener的逻辑进行测试好 ...
就拿你这个例子说吧,你这个例子的一些特点都指向Fake而不是Mock: 首先,View是一个interface,且上面没有触发事件的方法,也就是说,仅仅mock interface根本没法触发事件,所以才有了你的matcher. 其次,ActionListener是inner class,action的实例都拿不到。 第三,显然你这个不是TDD出来的,测试的意图有很明显的功能测试的意思,而mock恰恰多数是用于unit test的。 因此用Fake是最直接的做法。 而利于mock的写法,是把测试分开,ActionListener和Present来测, 且不用inner class in P ...
你给的例子不是Mock,至多是Fake。各种区别见马大叔的Mocks Aren't Stubs:* Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.* Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memor ...
raimundox
搜索本博客
博客分类
最近加入圈子
最新评论
评论排行榜