Testing a class method that also is called in initialize

Hi im still learning testing and bit confused about testing the
parse_file method below

class Data
def initialize a_file
@records = parse_file(a_file)
end

def parse_file(a_file)

end
end

To test parse_file i must first create a new data object i.e.

sample_data = Data.new(“survey”)
then in my test

assert_equal blah, sample_data.parse_file(“sample.txt”)

but in the test when i create a new data object the the method will be
invoked via initialize before ive even tested it which doesnt sit right
with me.

Should i be mocking this? Or is there a simpler solution to this.

On Sun, Mar 7, 2010 at 2:17 AM, Adam A. [email protected]
wrote:

 ....

but in the test when i create a new data object the the method will be
invoked via initialize before ive even tested it which doesnt sit right
with me.

Should i be mocking this? Or is there a simpler solution to this.

Posted via http://www.ruby-forum.com/.

Hmm seems you want to test something you did not implement.
A first but radical measure would be to do some [BT]DD. That means
that you have to throw away your code because you simply do not hava
any right to write code that does not make any tests pass… Then
write your tests (I prefer specs or behaviors) and then implement
them. Now your issue above should be a non issue (I guess, but if it
is please post again).

A second idea is to do some very nasty setup like

object = Data.allocate
assert_equal blah, object.parse

OMG this code is sooo fragile, but it might save your day.

And last but not least mocking isa powerful technique, I do not know a
lot about it :(. Here it’s use might hide a design flaw though IMHO.

HTH
Robert

On 3/6/10, Adam A. [email protected] wrote:

  ....

but in the test when i create a new data object the the method will be
invoked via initialize before ive even tested it which doesnt sit right
with me.

What harm is going to come of letting parse_file run before the
assertion which tests it? I don’t understand your concern.

IMNSHO, the assignment to @records should occur inside of parse_file,
OR parse_file should be private.

Should i be mocking this? Or is there a simpler solution to this.

Avoid mocks unless they’re really necessary.