Jano Svitok
5/21/2007 2:24:00 PM
On 5/21/07, Disha Tamhane <disha.tamhane@gmail.com> wrote:
> Hey Gregory,
>
> Thanks for your response.
>
> Following is the code snippet that i am trying to test :
>
>
> basedir = ARGV[0]
>
> if (ARGV[0])
> contains = Dir.new(basedir).entries
> for file in contains
> if (file != "." && file !="..")
> tokens = file.split("-");
> model = tokens[0]
> tokens1 = tokens[2].split(".xm")
> dealer = tokens1[0]
> puts model + "," + dealer + "," + basedir + "/" + file
> getallocprsr = GetAllocationsParser.new
> getallocprsr.parsefile(basedir + "/" + file)
> sql = "UPDATE Validations set getAlloc = " +
> getallocprsr.allocation.to_s
> sql = sql + " where DealerName like '" + dealer + "' and
> Vehicleline like '" + model + "'"
> puts sql
> db.updateQuery(sql)
> end
> end
> else
>
> puts "Usage :"
> puts ""
> puts "$> ruby a.rb <basedir> "
> puts ""
> puts "basedir : This is the base directory where the getAllocations
> responses"
> puts " can be found"
> puts ""
> end
> db.close
>
>
>
> Thanks,
>
> Disha
>
>
>
> On 5/21/07, Gregory Brown <gregory.t.brown@gmail.com> wrote:
> >
> > On 5/21/07, Disha Tamhane <disha.tamhane@gmail.com> wrote:
> > > Hi,
> > >
> > > I have a script in one file say "a.rb".
> > > I have another file "tc_a.rb" which is a test case for "a.rb"
> > > I have called a specific script in "a.rb" by using the system() command
> > from
> > > "tc_a.rb"
> > >
> > > Now when i am using rcov to get the code coverage, although an if -else
> > > block in "a.rb" is getting executed, rcov doesn't seem to recognise
> > it... it
> > > still shows the block as not covered...May be because it is getting
> > called
> > > through the system command
> > >
> > > This particular if-else block is an independent one i.e. not present in
> > any
> > > method in "a.rb"
> > >
> > > I need to get this block covered...
> > >
> > > Can someone suggest a solution?
> >
> > Are you doing something like, taking arguments
> >
> > e.g:
> >
> > ARGV[0].do_something
> >
> > and you want to test this?
> >
> > if that's the case, split it up into a library / script combo, and
> > make the functions testable
> >
> > #---------
> >
> > def do_it(arg)
> > arg.do_something
> > end
> >
> > if __FILE__ == $PROGRAM_NAME
> > do_it(ARGV[0])
> > end
> >
> > #------
> >
> > Now you can test the do_it method by just requiring the file.
> > if you do this cleanly enough, there won't be much left to test in your
> > script.
Gregory is right - you should put ARGV handling somewhere aside to
make testing easier.
That said, you can pass arguments to your script using -- delimiter,
but IMO they should be test harness related, not code-under-test
related. For example,
rcov -replace-progname [i.e. rcov option] tc_xxx.rb -- -whatever a b
[script options]
rcov normally changes $0 as well, so I use to add --replace-progname
and use this version of if __FILE__ == $0 guard:
if File.expand_path(__FILE__) == File.expand_path($0)
....
end
(it fixes the $0 == 'script.rb' vs. $0 == './script.rb' case)
J.