Bill Guindon
7/13/2005 9:27:00 PM
On 7/13/05, Robert Klemme <bob.news@gmx.net> wrote:
>
> "Bill Guindon" <agorilla@gmail.com> schrieb im Newsbeitrag
> news:67a2229205071312286a9e19d9@mail.gmail.com...
> On 7/13/05, Bill Guindon <agorilla@gmail.com> wrote:
> > I ran ZenTest against the following code:
> >
> > module SomeDB
> > class Field
> > attr_accessor :name, :type, :size
> >
> > def initialize(name, type, size=0)
> > @name = name
> > @type = type
> > @size = size
> > end
> >
> > def to_s
> > [@name, @type] << @size unless @size == 0
> > end
> > end
> > end
> >
> > And it produced the following test code:
> >
> > # Code Generated by ZenTest v. 2.3.0
> > # classname: asrt / meth = ratio%
> > # SomeDB::Field: 0 / 2 = 0.00%
> >
> > require 'test/unit' unless defined? $ZENTEST and $ZENTEST
> >
> > module TestSomeDB
> > class TestField < Test::Unit::TestCase
> > def test_name_equals
> > raise NotImplementedError, 'Need to write test_name_equals'
> > end
> >
> > def test_size
> > raise NotImplementedError, 'Need to write test_size'
> > end
> >
> > def test_size_equals
> > raise NotImplementedError, 'Need to write test_size_equals'
> > end
> >
> > def test_type_equals
> > raise NotImplementedError, 'Need to write test_type_equals'
> > end
> > end
> > end
> >
> > # Number of errors detected: 2
> >
> > Any idea why it didn't create stubs for 'test_name' and 'test_size'?
> > Shouldn't it have also created a stub for 'test_to_s'?
>
> > After poking around in ZenTest, I'm guessing that it's caused by
> > method subtraction -- something like the following:
> > the_methods -= Object.instance_methods(true)
> > the_methods -= Kernel.methods
>
> > Which explains why it ignored 'to_s', and had issues with 'name' and
> > 'size', although I still find it strange that it built the '_equals'
> > methods for them.
>
> As far as I can see stubs for #size are in place. Did you mean #type
> instead? Btw, #type is not a good method name, as it's the old alias for
> #class - so it may break some code if your class returns something different
> than a Class instance.
Yep, mixed up #size and #type. It seems safe in this case, it's just
a plain text attribute, but I do try to keep that in mind.
> > Any suggestions on avoiding this? The obvious answer is not to use
> > methods with the same name as Object or Kernel methods, but that seems
> > a bit harsh.
>
> Maybe the algorithm that determines methods must be beefed up a bit.
Seems that way, but I can see why he took that route.
Even with this one little oddity, it's a great library.
> Kind regards
>
> robert
--
Bill Guindon (aka aGorilla)