Overview ======== rcov is a code coverage tool for Ruby. It is commonly used for viewing overall test coverage of target code. It features: * fast execution: 20-300 times faster than previous tools * multiple analysis modes: standard, bogo-profile, "intentional testing", dependency analysis... * detection of uncovered code introduced since the last run ("differential code coverage") * fairly accurate coverage information through code linkage inference using simple heuristics * cross-referenced XHTML and several kinds of text reports * support for easy automation with Rake * colorblind-friendliness How do I use it? ================ In the common scenario, your tests are under test/ and the target code (whose coverage you want) is in lib/. In that case, all you have to do is use rcov to run the tests (instead of testrb), and a number of XHTML files with the code coverage information will be generated, e.g. rcov -Ilib test/*.rb will execute all the .rb files under test/ and generate the code coverage report for the target code (i.e. for the files in lib/) under coverage/. The target code needs not be under lib/; rcov will detect is as long as it is require()d by the tests. rcov is smart enough to ignore "uninteresting" files: the tests themselves, files installed in Ruby's standard locations, etc. See rcov --help for the list of regexps rcov matches filenames against. rcov can also be used from Rake; see readme_for_rake or the RDoc documentation for more information. rcov can output information in several formats, and perform different kinds of analyses in addition to plain code coverage. See rcov --help for a description of the available options. Sample output ============= The text report (also used by default in RcovTasks) resembles +-----------------------------------------------------+-------+-------+--------+ | File | Lines | LOC | COV | +-----------------------------------------------------+-------+-------+--------+ |lib/rcov.rb | 572 | 358 | 91.3% | +-----------------------------------------------------+-------+-------+--------+ |Total | 572 | 358 | 91.3% | +-----------------------------------------------------+-------+-------+--------+ 91.3% 1 file(s) 572 Lines 358 LOC The (undecorated) textual output with execution count information looks like this: $ rcov --no-html --text-counts b.rb ================================================================================ ./b.rb ================================================================================ | 2 a, b, c = (1..3).to_a | 2 10.times do | 1 a += 1 | 10 20.times do |i| | 10 b += i | 200 b.times do | 200 c += (j = (b-a).abs) > 0 ? j : 0 | 738800 end | 0 end | 0 end | 0 rcov can detect when you've added code that was not covered by your unit tests: $ rcov --text-coverage-diff --no-color test/*.rb Started ....................................... Finished in 1.163085 seconds. 39 tests, 415 assertions, 0 failures, 0 errors ================================================================================ !!!!! Uncovered code introduced in lib/rcov.rb ### lib/rcov.rb:207 def precompute_coverage(comments_run_by_default = true) changed = false lastidx = lines.size - 1 if (!is_code?(lastidx) || /^__END__$/ =~ @lines[-1]) && !@coverage[lastidx] !! # mark the last block of comments !! @coverage[lastidx] ||= :inferred !! (lastidx-1).downto(0) do |i| !! break if is_code?(i) !! @coverage[i] ||= :inferred !! end !! end (0...lines.size).each do |i| next if @coverage[i] line = @lines[i] License ------- rcov is released under the terms of Ruby's license.