浏览 2403 次
锁定老帖子 主题:单元测试势在必行的一个例证
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-13
原方法: class Modelx < ActiveRecord::Base def methoda #blablabla self.save! end end 更改后的方法: class Modelx < ActiveRecord::Base def methoda #blablabla self.save! wanna_do_sth end end 改动后的方法并没有返回布尔值!这种错误是不经意而且是容易犯下的,如果能够在对方法重构或者更改后立即有一个"单元测试"的习惯,这个错误是立即可以发现并解决。可见单元测试在开发中势在必行,且作用价值不可估量。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-08-13
这是很常见的一个bug。
很多修改api的开发者,并不完全了解该api的用法(包括这个api的设计者)。 所以,在命名中说明清楚,是一个不错的选择, |
|
返回顶楼 | |
发表时间:2008-08-13
除了单元测试,我觉得这里还有一个值得讨论的问题就是ruby的代码规范:
1. 如果需要返回布尔值的方法名,在方法名最后加上? 2. ruby不需要显式调用return关键字,如果知道方法的执行结果需要被调用者用到,建议还是加上return。 class Modelx < ActiveRecord::Base def methoda? #blablabla return self.save! end end 这样可以减少错误发生的几率 |
|
返回顶楼 | |
发表时间:2008-08-14
以上代码还有错误 save! 是抛错的.
save 返回值才是 true | false |
|
返回顶楼 | |
发表时间:2008-08-27
open2ye 写道 以上代码还有错误 save! 是抛错的. save 返回值才是 true | false 记得在哪里看到javaeye是在application中统一处理异常,所以减少了不少的代码量。 类似于beast的做法。 |
|
返回顶楼 | |
发表时间:2008-09-03
不是可以使用autotest的吧 代码以改变立刻 自动做单元测试 那个插件
|
|
返回顶楼 | |
发表时间:2008-09-03
gakaki 写道 不是可以使用autotest的吧 代码以改变立刻 自动做单元测试 那个插件
show一段Rakefile里的内容 task :commit => %w(svn:up default svn:add svn:commit log:clear) task :default => %w(db:test:prepare unit functional) namespace :svn do task :add do sh %(svn st | grep "^?" | awk -F " " '{printf "\\"%s\\"\\n", $2}' | xargs svn add) end task :commit do sh %(svn stat --ignore-externals) require 'readline' pair = prompt_cached 'Pair' story = prompt_cached 'Story / Bug Number' comment = prompt_cached 'Comment' sh %(svn ci -m "#{pair} - ##{story} - #{comment}") end def prompt_cached(label) file = ".#{label.gsub(/\W/, '')}" value = File.read(file) if File.exist?(file) new_value = Readline.readline("#{label}#{value ? " [#{value}]" : ''}: ") if new_value.any? value = new_value File.open(file, 'w') {|f| f.write value } end value end task :up do ignore_externals = "--ignore-externals" if ENV['IGNORE_EXTERNALS'] sh %(svn up #{ignore_externals}) end end 重点看前两行,后面供参考。 提交代码必须用“rake commit”,于是世界清净了。 |
|
返回顶楼 | |