Forum: Ruby Implementing the Self-Shunt testing pattern

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Dave C. (Guest)
on 2006-02-13 07:16
(Received via mailing list)
I just stumbled across the Self-Shunt unit testing pattern[0] and
decided, in my nuby quest to learn more about Ruby, to implement it in
Ruby. It's simple enough thanks to duck-typing. Almost ridiculously so,
in fact.

My question, though, is: does the way I implemented this go against an
established ruby idiom or violate "the ruby way" in any way? If so I'd
love to hear it.

Thanks!
-dave

[0] http://www.objectmentor.com/resources/articles/Sel...

===== self_shunt.rb
require 'test/unit'

# Implements self-shunt pattern in Ruby.
# Self-shunt detailed at:
http://www.objectmentor.com/resources/articles/Sel...

class Display
   def display_item(item)
     puts "The REAL display is showing: #item"
     # God only knows what other processing might take place here ...
   end
end

class Scanner
   # accepts any object having a #display_item(item) method
   # hooray duck typing :)
   def initialize(display)
     @display = display
   end
   def scan(item)
     @display.display_item(item)
   end
end

# completely pointless class to demonstrate the idea
class Item
   def initialize(name)
     @name = name
   end
   def to_s
     @name
   end
end


# first test the self-shunt
class ScannerTest < Test::Unit::TestCase
   def test_scan
     scanner = Scanner.new(self)
     item = Item.new("test item")
     scanner.scan(item)
     assert_equal("test item", @displayed_item.to_s)
   end
   def display_item(item)
     @displayed_item = item
   end
end


# now do the real thing
def main  # habits die hard... :)
   display = Display.new
   scanner = Scanner.new(display)
   scanner.scan Item.new("now we are displaying the REAL item")
   2.times {puts}  # to pad between this output and the test output
end

main
David V. (Guest)
on 2006-02-13 07:31
(Received via mailing list)
DÅ?a Pondelok 13 Február 2006 06:16 Dave C. napísal:
> -dave
>
> [0] http://www.objectmentor.com/resources/articles/Sel...
>

I -so- needed this PDF - self-shunt is the one thing that really
confused me
while skimming through Beck's TDD:BE. Now if I can figure out how to do
this
in Java without getting a compiler induced headache, my job will be so
much
more fun...

> main
>

Weakling ;P You forgot an if $0 == __FILE__, or however that idiom I
never use
anyway goes. Next thing we know, you're hacking the interpreter to give
you
warnings about mismatched signedness of variables...

Anyways, thanks a lot for the code snippet, I have something to grok as
relaxation at last.

David V.
Dave C. (Guest)
on 2006-02-13 08:27
(Received via mailing list)
> I -so- needed this PDF - self-shunt is the one thing that really confused me
> while skimming through Beck's TDD:BE. Now if I can figure out how to do this
> in Java without getting a compiler induced headache, my job will be so much
> more fun...

Yeah, I remember seeing this pattern a while back somewhere else. Head
scratches and muttered "wtf" abounded. This made it ridiculously clear.

> Anyways, thanks a lot for the code snippet, I have something to grok as
> relaxation at last.

Sweet.
This topic is locked and can not be replied to.