From: Alan Chen Date: 2002-10-05T03:36:11+09:00 Subject: Re: assertions in Ruby On Sat, Oct 05, 2002 at 03:07:53AM +0900, Volkmann, Mark wrote: > > > -----Original Message----- > > From: Alan Chen [mailto:alan@digikata.com] > > Sent: Friday, October 04, 2002 11:37 AM > > To: ruby-talk@ruby-lang.org > > Subject: Re: assertions in Ruby > > > > On Fri, Oct 04, 2002 at 10:43:46PM +0900, Volkmann, Mark wrote: > > > > > > Is anyone aware of a Ruby module that adds support for > > assertions such as what > > > is supported in Java 1.4? I wrote such a thing yesterday > > and am considering > > > releasing it if I'm not duplicating what someone else has > > already done. > > > I've included some examples below showing how mine is used. > > > > I have an unreleased, partailly completed module which include the > > Test::Unit asserts when $DEBUG is set and do nothing otherwise. It > > looks almost the same as yours. The only suggestion I have is maybe > > working it in with the Ruby::Unit or Test::Unit frameworks. > I'm not quite convinced that assertions should be integrated with a unit > testing framework. They seem fundamentally different to me. > With assertions enabled, an application generally stops as soon as one fails. > Results are not collected into a report since only one failure is reported. > Assertions go in the code and remain there for documentation purposes. > With unit tests, tests continue even if one fails. Results are collected into > a report. Unit tests go in a separate class written exclusively for testing > purposes. > What kinds of things do you envision that an assertion framework borrow from a > unit testing framework? Sorry, I didn't mean to imply that unit testing and assertions should be strongly tied together. Test::Unit for example provides a wide range of asserts already. The Test::Unit assert code itself is a fairly orthogonal module, and, as far as I know, has no other dependencies on other parts of the unit test framework. So.. I just did something like the following: if $DEBUG module Myasserts require 'test/unit/assertions' include Test::Unit::Assertions end else # all empty assert methods module Myasserts def flunk(msg);end def assert(expr,msg);end # other assertions omitted... end end Now instead of Myasserts, an integrated module might be named Test::Assertions. The main reason to separate into its own module is that you always want the asserts to fire in a unit test, but not always during an application run. I don't really care if its $DEBUG that controls it or some other flag. $DEBUG was just convenient in my case. -- Alan Chen Digikata LLC http://digikata.com