From: Simon Wex Date: 2007-08-08T14:16:59+09:00 Subject: Re: capturing stdout during unit tests One option is to write your test to execute your script on the command line. I'm pretty sure this is the piece you're missing: # asign the shell output of the ls command to a variable ls_output = `ls` # Do something semi-useful with it. items = ls_output.split puts "There are #{items.size} objects in the directory." -Simon 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. > > Thanks, > > Mark -- Posted via http://www.ruby-forum.com/.