ZenTest: December 2007 Archives

Now that 1.9 is out, it is time to talk about multi-version testing using multiruby. multiruby is a lesser known tool in the zentest family. It automatically builds and privately installs multiple versions of ruby and multiplexes commands to all of them, allowing you to run your tests across multiple versions of ruby all at once.

If you read this blog, you probably already have zentest and multiruby is already available to you. If not, sudo gem install zentest and you're good to go. You can try it out now (tho I recommend updating zentest to the latest version for all the candy) and you should see something like this:

% multiruby -e 'p 1+1'
creating /Users/ryan/.multiruby
creating build
creating install
creating versions
  Downloading initial ruby tarballs to ~/.multiruby/versions:
    ruby-1.8.6-p111.tar.gz via HTTP... this might take a while.
    ruby-1.9.0-0.tar.gz via HTTP... this might take a while.
  ...done
  Put other ruby tarballs in ~/.multiruby/versions to use them.
creating /Users/ryan/.multiruby/install/1.8.6-p111
Running command: tar zxf ../versions/ruby-1.8.6-p111.tar.gz
building and installing 1.8.6-p111
Running command: ./configure --prefix /Users/ryan/.multiruby/install/1.8.6-p111 &> log.configure
Running command: nice make -j4 &> log.build
Running command: make install &> log.install
creating /Users/ryan/.multiruby/install/1.9.0-0
Running command: tar zxf ../versions/ruby-1.9.0-0.tar.gz
building and installing 1.9.0-0
Running command: ./configure --prefix /Users/ryan/.multiruby/install/1.9.0-0 &> log.configure
Running command: nice make -j4 &> log.build
Running command: make install &> log.install

VERSION = 1.8.6-p111

2

RESULT = 0

VERSION = 1.9.0-0

2

RESULT = 0

TOTAL RESULT = 0 failures out of 2

Passed: 1.8.6-p111, 1.9.0-0
Failed:

Of course, it only builds when it detects new versions in the versions directory. The next time you run it should be much faster and cleaner:

% multiruby -e 'p 1+1'

VERSION = 1.8.6-p111

2

RESULT = 0

VERSION = 1.9.0-0

2

RESULT = 0

TOTAL RESULT = 0 failures out of 2

Passed: 1.8.6-p111, 1.9.0-0
Failed:

What this really boils down to is this: you now have a command that you can use in place of ruby to test on multiple versions of ruby. Where before you'd type rake and get:

% rake
(in /Users/ryan/Work/p4/zss/src/ZenTest/dev)
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -w -Ilib:ext:bin:test -e 'require "test/test_autotest.rb"; require "test/test_help.rb"; require "test/test_rails_autotest.rb"; require "test/test_rails_controller_test_case.rb"; require "test/test_rails_helper_test_case.rb"; require "test/test_rails_view_test_case.rb"; require "test/test_unit_diff.rb"; require "test/test_zentest.rb"; require "test/test_zentest_assertions.rb"; require "test/test_zentest_mapping.rb"; require "test/unit"'
Loaded suite -e
Started
......................................................................................................................................
Finished in 0.1947 seconds.

134 tests, 425 assertions, 0 failures, 0 errors

Now you can grab that ruby command and run it with multiruby instead:

% multiruby -w -Ilib:ext:bin:test -e 'require "test/test_autotest.rb"; require "test/test_help.rb"; require "test/test_rails_autotest.rb"; require "test/test_rails_controller_test_case.rb"; require "test/test_rails_helper_test_case.rb"; require "test/test_rails_view_test_case.rb"; require "test/test_unit_diff.rb"; require "test/test_zentest.rb"; require "test/test_zentest_assertions.rb"; require "test/test_zentest_mapping.rb"; require "test/unit"' 

VERSION = 1.8.6-p111

Loaded suite -e
Started
.........................................................................................................
Finished in 0.148562 seconds.

105 tests, 338 assertions, 0 failures, 0 errors

RESULT = 0

VERSION = 1.9.0-0

Loaded suite -e
Started
..................................................................................................................................
Finished in 0.147284 seconds.

130 tests, 407 assertions, 0 failures, 0 errors

RESULT = 0

TOTAL RESULT = 0 failures out of 2

Passed: 1.8.6-p111, 1.9.0-0
Failed:

But wait, there's MORE! As an added bonus, if you're using hoe on your project, you already have a rake multi task that does the running for you, no icky copy and paste!

That is all there is to it (besides fixing 1.9 compatibilities, of course), so get out there and test your code!

ZenTest provides 4 different tools and 1 library: zentest, unit_diff, autotest, multiruby, and Test::Rails.

ZenTest scans your target and unit-test code and writes your missing code based on simple naming rules, enabling XP at a much quicker pace. ZenTest only works with Ruby and Test::Unit.

unit_diff is a command-line filter to diff expected results from actual results and allow you to quickly see exactly what is wrong.

autotest is a continous testing facility meant to be used during development. As soon as you save a file, autotest will run the corresponding dependent tests.

multiruby runs anything you want on multiple versions of ruby. Great for compatibility checking!

Test::Rails helps you build industrial-strength Rails code.

Changes:

3.7.1 / 2007-12-27

ZenTest provides 4 different tools and 1 library: zentest, unit_diff, autotest, multiruby, and Test::Rails.

ZenTest scans your target and unit-test code and writes your missing code based on simple naming rules, enabling XP at a much quicker pace. ZenTest only works with Ruby and Test::Unit.

unit_diff is a command-line filter to diff expected results from actual results and allow you to quickly see exactly what is wrong.

autotest is a continous testing facility meant to be used during development. As soon as you save a file, autotest will run the corresponding dependent tests.

multiruby runs anything you want on multiple versions of ruby. Great for compatibility checking!

Test::Rails helps you build industrial-strength Rails code.

Changes:

3.7.0 / 2007-12-21

  • 8 minor enhancements:

    • Added add_mapping to make file mappings cleaner.
    • Added assert_callback thanks to Aaron Patterson.
    • Added autotest/cctray.
    • Added extrafiles and extraclass_map, allowing .autotest files to be awesome.
    • Added url for lettuce principal thanks to Hugh Sasse.
    • Added zentest.rb refactorings thanks to Hugh Sasse.
    • Exceptions are now an array of regexps, built after :initialize hook.
    • Removed rubyfork and rubyfork_client. Eric got a faster laptop. :P
  • 6 bug fixes:

    • Fixed all my annoyances with @exceptions.
    • Fixed crasher in autotest/redgreen for non-matches.
    • Fixed everything to work with ruby 1.9.
    • Fixed rubygem requires causing strangeness in tests.
    • Fixed zentest mapping so ruby2ruby and test_ruby2ruby work.
    • Removed stupid YAML methods from TrueClass during testing. (Infected by Test::Rails' use of rubygems)
  • http://www.zenspider.com/ZSS/Products/ZenTest/

  • http://rubyforge.org/projects/zentest/
  • ryand-ruby@zenspider.com

About this Archive

This page is a archive of entries in the ZenTest category from December 2007.

ZenTest: July 2007 is the previous archive.

ZenTest: January 2008 is the next archive.

Find recent content on the main index or look in the archives to find all content.

Pages

Powered by Movable Type 4.1