[…] http://www.rubygarden.org/ruby?CompareByValue
Concerning unit testing, I don’t seem to use #=='s muuch
on classes. I think I usually test whether functions return
the right thing or not.
What do you use to compare the return values to the expected
values?
If you use one of the built-in types (Strings, Arrays, Hashes,
etc.), they all have decent .=='s for this purpose. However, the
minute you move onto less primitive types, you end up defining
the == method.
Especially as a system grows, abstractions are built. You end up
seeing fewer and fewer primitives… and hence define more and
more .== methods. =)
However, I suppose that you would have to put some limitations
on testing the instance variables. For example, do you trace
through arrays?
Arrays don’t get special-cased. You just call Array#== the same
as you’d call Burro#==. Fortunately, Array#== is appropriate for
this case, which is that it compares by value.
If this was a tree class, it could be a mess.
Do I understand this correctly?
I’m pretty sure you understand correctly, because you know it
will be a mess. =)
However, it’s normally what I mean, for [contrived] example:
expected = ImaginarySqlStatementClass.new {
:select => [ ‘*’ ],
:from => [ ‘animals’ ],
:where => “name = ‘burro’”
}
actual = “select * from animals where name = ‘burro’”.to_sql
assert_equal expected, actual
Yes, the member variables of expected/actual are trees… but I
want to compare them by value.
Hmm…I wonder if one could sort the output of Marshall.dump
and compare…
Actually, using .inspect was Nathaniel’s first thought. Then, we
got tripped up by the way it puts its id into the string. Then,
we worked around that, only to find out that the order of the
member variables can get dumped in differing orders depending
(IIRC) on which order they’re initialized.
The second attempt was to use Marshall.dump, but I ran into some
minor glitch just like with .inspect.
It might end up being worth hacking around these problems to get
a concise implementation, though.
···
On 2002.08.29, Jim Freeze jim@freeze.org wrote:
On Thu, Aug 29, 2002 at 01:08:13PM +0900, Ryan King wrote:
On 2002.08.29, Jim Freeze jim@freeze.org wrote: