Rubyにはcoverageという標準ライブラリが存在しており、これを使用することでRubyのスクリプトを実行したときに、どの行が何回実行されているかを確認することが出来ます。FizzBuzzのコードを例に説明します。
fizzbuzz.rb
1.upto(100) do |n|
if n % 3 == 0 && n % 5 == 0
puts 'FizzBuzz'
elsif n % 3 == 0
puts 'Fizz'
elsif n % 5 == 0
puts 'Buzz'
else
puts n
end
end
計測を行うコードですが Coverage.start
で計測を開始して、Coverage.result
で集計結果を取得することが出来ます。取得した値は [ファイルのパス, 各行の実行回数]
の配列の形式で保存されています。
coverage.rb
require 'coverage'
Coverage.start
require_relative 'fizzbuzz'
result = Coverage.result
result.each do |filepath, count_list|
puts '-' * 80
count_list.zip(File.readlines(filepath)).each do |count, line|
puts "#{count.to_i.to_s.rjust(10)}: #{line}"
end
puts '-' * 80
end
実行するとこんな感じで表示されます。
# FizzBuzzの実行結果
.
.
.
--------------------------------------------------------------------------------
1: 1.upto(100) do |n|
100: if n % 3 == 0 && n % 5 == 0
6: puts 'FizzBuzz'
0: elsif n % 3 == 0
27: puts 'Fizz'
0: elsif n % 5 == 0
14: puts 'Buzz'
0: else
53: puts n
0: end
0: end
--------------------------------------------------------------------------------
fizzbuzz.rbを実行したときに、どこが何回実行されたかを確認することが出来ました