[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Implementing the Self-Shunt testing pattern

Dave Cantrell

2/13/2006 5:17:00 AM

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/SelfSh...

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

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

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


2 Answers

David Vallner

2/13/2006 5:31:00 AM

0

Dna Pondelok 13 Február 2006 06:16 Dave Cantrell napísal:
> 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/SelfSh...
>

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 Vallner


Dave Cantrell

2/13/2006 6:28:00 AM

0

> 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.