我正在使用 RSpec 编写测试。
您认为什么是好的代码测试比率?
良好的测试与代码比率可以让您对自己编写的代码充满信心,还可以让您自信地重构,您会知道您在应用程序的其余部分中影响了什么。我的测试比率从 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
多么酷啊?
我发现真正难以获得完整测试覆盖的唯一事情是涉及并发的测试,尤其是。比赛条件。试图证明互斥锁或临界区必须到位可能很困难。有时你可以做到。有时,您只需耸耸肩,输入您不知道如何测试的代码行,然后继续前进。
它因人而异。简单的代码我希望测试代码和生产代码一样多。复杂的代码很容易得到两倍的测试代码。进行测试驱动开发,不必担心比率,因为代码中的所有内容都是由测试驱动的,这很重要。