Implementing the Self-Shunt testing pattern

D

Dave Cantrell

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/SelfShunPtrn.pdf

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

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

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
 
D

David Vallner

D=C5=88a Pondelok 13 Febru=C3=A1r 2006 06:16 Dave Cantrell nap=C3=ADsal:
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/SelfShunPtrn.pdf

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

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

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

David Vallner
 
D

Dave Cantrell

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,071
Latest member
MetabolicSolutionsKeto

Latest Threads

Top