【发布时间】:2009-07-30 09:49:12
【问题描述】:
我正在使用 RSpec 编写测试。
您认为什么是好的代码测试比率?
【问题讨论】:
标签: ruby-on-rails ruby rspec
我正在使用 RSpec 编写测试。
您认为什么是好的代码测试比率?
【问题讨论】:
标签: ruby-on-rails ruby rspec
代码测试比率是一个有点误导性的统计数据。一个更好的方法是使用rcov,您可以通过运行rake spec:rcov轻松使用它
虽然有时将 100% 的代码覆盖率作为绝对目标,但您很快就会遇到law of diminishing returns。我个人的目标是在所有生产代码中实现 90% 的代码覆盖率;尽管这主要是任意的,但我发现有一个目标数字要容易得多。
【讨论】:
$ rake stats的代码与测试比率更具误导性
良好的测试与代码比率是一种让您对自己编写的代码充满信心的测试,同时也让您可以自信地重构,因为您会知道您在应用程序的其余部分中受到的影响。我的测试比率从 1:1.5 到 1:2.5 左右不等,它确实会根据您的应用程序的复杂性而有所不同。
【讨论】:
我们目前正在谈论意见。良好的代码测试比率是这样一种比率,即您的代码被覆盖到需要的程度,以使对所写内容的信心和信心,当您进行重构时,您会知道周围发生了什么问题。
数字很好,但在其中放太多股票同样危险。
【讨论】:
我的目标是不让 rcov 和 heckle 泄露未经测试的代码。当你获得了 rcov 所能获得的所有覆盖率后,你就可以通过 heckle 运行代码了。 Heckle 修改您的代码并向您显示哪些修改未被测试捕获。
rspec 知道 heckle。安装 heckle gem 后:“spec foo_spec.rb -H Foo”。哦,如果您遇到奇怪的错误,请安装 ruby2ruby 的 1.2.2 版本而不是 1.2.4。
这是我认为我已经完全指定的功能的抱怨:
The following mutations didn't cause test failures:
--- original
+++ mutation
def model_matches?(substring)
- s = substring.gsub(/\./, ".")
+ s = substring.gsub(/\033!\032\002l\}\?V\010d\}\r\-\fyg,a\*jFT\003_"ga\016\020ufN\0066/, ".")
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
Regexp.new(s, "i").=~(@model)
end
--- original
+++ mutation
def model_matches?(substring)
- s = substring.gsub(/\./, ".")
+ s = substring.gsub(/\./, "\023GA3w+h-#z$?I;a\"k0n^r$\005io#l\023H1M{\034m")
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
Regexp.new(s, "i").=~(@model)
end
--- original
+++ mutation
def model_matches?(substring)
- s = substring.gsub(/\./, ".")
+ s = nil
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
Regexp.new(s, "i").=~(@model)
end
--- original
+++ mutation
def model_matches?(substring)
s = substring.gsub(/\./, ".")
s = substring.gsub(/\*/, ".*")
s = "^#{s}$"
- Regexp.new(s, "i").=~(@model)
+ Regexp.new(s, "v\022").=~(@model)
end
这有多酷?
我发现真正难以获得完整测试覆盖的唯一事情是涉及并发的测试,特别是。比赛条件。试图证明互斥锁或临界区必须到位可能很困难。有时你可以做到。有时,您只需耸耸肩,输入您不知道如何测试的代码行,然后继续。
【讨论】:
它因人而异。简单的代码我希望测试代码和生产代码一样多。复杂的代码很容易得到两倍的测试代码。进行测试驱动开发,不必担心比率,因为代码中的所有内容都是由测试驱动的,这很重要。
【讨论】: