From: Robert Dober Date: 2010-03-07T18:33:24+09:00 Subject: Re: testing a class method that also is called in initialize On Sun, Mar 7, 2010 at 2:17 AM, Adam Akhtar wrote: > 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. > -- > 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 -- Learning without thought is labor lost; thought without learning is perilous.” --- Confucius