本文簡要介紹ruby語言中 Coverage模塊
的用法。
Coverage
為 Ruby 提供覆蓋率測量函數。此函數是實驗性的,因此這些 API 將來可能會更改。
警告:目前,僅支持process-global 覆蓋測量。您無法測量per-thread 覆蓋。
用法
-
需要“coverage”
-
需要或加載 Ruby 源文件
-
Coverage.result
將返回一個包含文件名作為鍵和覆蓋數組作為值的哈希。覆蓋數組為每一行提供解釋器執行的行數。nil
值表示此行(如else
和end
之類的行)禁用覆蓋。
例子
[foo.rb]
s = 0
10.times do |x|
s += x
end
if s == 45
p :ok
else
p :ng
end
[EOF]
require "coverage"
Coverage.start
require "foo.rb"
p Coverage.result #=> {"foo.rb"=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]}
行 Coverage
如果在開始覆蓋時未明確指定覆蓋模式,則將運行行覆蓋。它報告每行的行執行次數。
require "coverage"
Coverage.start(lines: true)
require "foo.rb"
p Coverage.result #=> {"foo.rb"=>{:lines=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]}}
行覆蓋結果的值是一個數組,其中包含每行執行了多少次。這個數組中的順序很重要。例如,該數組中的第一項,位於索引 0 處,報告在運行覆蓋時該文件的第 1 行執行了多少次(在此示例中為一次)。
nil
值表示此行(如 else
和 end
之類的行)的覆蓋範圍已禁用。
Oneshot 線條 Coverage
Oneshot 行覆蓋在覆蓋運行時跟蹤並報告已執行的行。它不會報告一行被執行了多少次,隻會報告它被執行了多少次。
require "coverage"
Coverage.start(oneshot_lines: true)
require "foo.rb"
p Coverage.result #=> {"foo.rb"=>{:oneshot_lines=>[1, 2, 3, 6, 7]}}
oneshot 行覆蓋結果的值是一個包含已執行行號的數組。
分支 Coverage
分支覆蓋率報告每個條件中的每個分支執行了多少次。
require "coverage"
Coverage.start(branches: true)
require "foo.rb"
p Coverage.result #=> {"foo.rb"=>{:branches=>{[:if, 0, 6, 0, 10, 3]=>{[:then, 1, 7, 2, 7, 7]=>1, [:else, 2, 9, 2, 9, 7]=>0}}}}
分支散列中的每個條目都是一個條件,其值是另一個散列,其中每個條目是該條件中的一個分支。值是方法執行的次數,鍵是關於分支的標識信息。
構成識別分支或條件的每個鍵的信息如下,從左到右:
-
分支或條件類型的標簽。
-
唯一標識符。
-
它出現在文件中的起始行號。
-
它出現在文件中的起始列號。
-
它出現在文件中的結束行號。
-
它出現在文件中的結束列號。
方法 Coverage
方法覆蓋率報告每個方法執行了多少次。
[foo_method.rb]
class Greeter
def greet
"welcome!"
end
end
def hello
"Hi"
end
hello()
Greeter.new.greet()
[EOF]
require "coverage"
Coverage.start(methods: true)
require "foo_method.rb"
p Coverage.result #=> {"foo_method.rb"=>{:methods=>{[Object, :hello, 7, 0, 9, 3]=>1, [Greeter, :greet, 2, 2, 4, 5]=>1}}}
方法哈希中的每個條目代表一個方法。此散列中的值是方法執行的次數,鍵是有關方法的標識信息。
構成識別方法的每個鍵的信息如下,從左到右:
-
班上。
-
方法名稱。
-
方法出現在文件中的起始行號。
-
方法出現在文件中的起始列號。
-
方法出現在文件中的結束行號。
-
方法出現在文件中的結束列號。
所有 Coverage
模式
您還可以使用此快捷方式同時運行所有覆蓋模式。請注意,運行所有覆蓋模式不會同時運行行和 oneshot 行。這些模式不能同時運行。在這種情況下運行行覆蓋,因為您仍然可以使用它來確定是否執行了行。
require "coverage"
Coverage.start(:all)
require "foo.rb"
p Coverage.result #=> {"foo.rb"=>{:lines=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil], :branches=>{[:if, 0, 6, 0, 10, 3]=>{[:then, 1, 7, 2, 7, 7]=>1, [:else, 2, 9, 2, 9, 7]=>0}}, :methods=>{}}}
相關用法
- Ruby Coverage.peek_result用法及代碼示例
- Ruby Context.save_history=用法及代碼示例
- Ruby Constants模塊用法及代碼示例
- Ruby Comparable.between?用法及代碼示例
- Ruby Complex.arg用法及代碼示例
- Ruby ComposedSet類用法及代碼示例
- Ruby Continuation類用法及代碼示例
- Ruby Complex.abs2用法及代碼示例
- Ruby Context.echo_on_assignment?用法及代碼示例
- Ruby Complex.angle用法及代碼示例
- Ruby Complex.polar用法及代碼示例
- Ruby Comment.extract_call_seq用法及代碼示例
- Ruby Cookie.new用法及代碼示例
- Ruby Comparable.clamp用法及代碼示例
- Ruby Complex.to_f用法及代碼示例
- Ruby Complex.cmp / numeric用法及代碼示例
- Ruby Complex.conj用法及代碼示例
- Ruby Converter.primitive_errinfo用法及代碼示例
- Ruby Config.get_value用法及代碼示例
- Ruby Context.echo?用法及代碼示例
- Ruby Command.arguments用法及代碼示例
- Ruby Complex類用法及代碼示例
- Ruby Complex.infinite?用法及代碼示例
- Ruby Complex.abs用法及代碼示例
- Ruby Context.echo_on_assignment用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Coverage模塊。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。