Awesome! Thank you. That's exactly the functionality I was looking for. Mark On Aug 8, 2007, at 12:08 AM, Eric Hodel wrote: > On Aug 7, 2007, at 20:59, Mark Slater wrote: >> I've written a script for use with Nagios (a monitoring tool) that >> I'd like to test. The requirements for the script is that it >> output a single line of text to STDOUT and then exit with a status >> code (0 - 3). My script is designed to monitor a few different >> services... each invocation includes a required command line >> argument specifying the service to monitor in the current >> invocation. To do that, I created a class for each type of service >> monitor. >> >> I'm now writing unit tests for my script, and I'd like to check >> that the output written to STDOUT by each service monitor class is >> correct. But I'm new to Ruby and I'm not sure how to do that. In >> other languages, I'd simply redefine STDOUT as a stream that goes >> to a large in-memory buffer, but I haven't seen anything that >> suggests that is possible in Ruby. The best I've come up with so >> far is creating a temporary file and calling $stdout.reopen() with >> the path to that temporary file. However, I'd much rather do this >> in memory because then I never have to worry about what file >> system and permissions the user executing the unit test has. > > Install the ZenTest gem, then: > > require 'test/zentest_assertions' > > class TestBlah < Test::Unit::TestCase > > def test_my_stuff > out, err = util_capture do the_thing end > assert_equal "...", out.string > assert_equal "...", err.string > end > end > > -- > Poor workers blame their tools. Good workers build better tools. The > best workers get their tools to do the work for them. -- Syndicate > Wars > > >