7rans edited this page Oct 25, 2013 · 5 revisions
Clone this wiki locally


Solo and Cross Runners

An important aspect of Turn's design that needs be kept in mind, is the way solo and cross testing features are implemented. This is some really neat code actually (IMO), but it might be difficult to grasp with out some explanation. What turn does when using the --solo or --cross options, is shell out to itself using the YAML reporter. It does this repeatedly for each test, or each pair of tests, respectively, and then collates all the resulting YAML reports into a single report, which it then feeds back into the selected reporter.

MiniTest Instead of Test::Unit

Ruby 1.9 dropped TestUnit as it's built-in test framework in favor of MiniTest. Unfortunately MiniTest is generally used via it's TestUnit emulation layer, which has made it very hard to support both frameworks and has required some serious code kung-fu to keep things working. For this reason, while the original Test::Unit runner remains in the code base, at this point there are no guarantee that Turn will work with the current Test Unit framework. The focus is now on support of MiniTest.

It is also important to note that MiniTest's API is not yet fully stable, and since Turn must couple tightly with MiniTest code it means Turn requires some regular maintenance. (UPDATE) As of MiniTest 5 this situation has greatly improved, so once Turn is updated to work with the latest API, there should be less hassle with MiniTest API changes going forward.

Two Runners


The current code base for 0.9+ no longer has two separate runners. The new version now ties the regular runner classes into the autorun mechanism. So this topic is no relevant.

The current implementation (v0.8.x) is really two programs.

On the one hand there are the autorunners which are used when running tests in the more traditional fashion of simply loading them into the Ruby interpretor. In this case one requires 'turn' in their test helper script.

On the other hand there is the turn command line tool which uses the regular runners and does not need the require 'turn' statement in test scripts. The turn command is much more versatile than using the require approach becuase it can produce a variety of output formats and also handle isolated and pair testing.

The original code base only had the TestUnit autorunner. As the turn command was being developed it was thought best to leave the autorunner alone so as to avoid any breakage while the new runners were being developed. At this point they are mature enough that an important issue is now to integrate the two type of runners, having the autorunner rely on it's regular counterpart.

Have Fun!