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
>
>
>