Mark Slater
8/8/2007 9:08:00 PM
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
>
>
>