Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Test::Unit: setup per TestCase class or per suite

Reply
Thread Tools

Test::Unit: setup per TestCase class or per suite

 
 
Michael Schuerig
Guest
Posts: n/a
 
      02-26-2007

For a performance test I need to populate the database with a large
number of records. The individual test cases only read the database
contents. It is rather time consuming and, after all, unnecessary to do
a full setup and teardown for each test case. I'd much prefer a clean
way to do setup and teardown once for the entire TestCase subclass.
AFAIR, in JUnit, there is a decorator for just this purpose. Is there
something similar for Test::Unit?

Michael

--
Michael Schuerig
(E-Mail Removed)
http://www.schuerig.de/michael/

 
Reply With Quote
 
 
 
 
Farrel Lifson
Guest
Posts: n/a
 
      02-26-2007
On 26/02/07, Michael Schuerig <(E-Mail Removed)> wrote:
>
> For a performance test I need to populate the database with a large
> number of records. The individual test cases only read the database
> contents. It is rather time consuming and, after all, unnecessary to do
> a full setup and teardown for each test case. I'd much prefer a clean
> way to do setup and teardown once for the entire TestCase subclass.
> AFAIR, in JUnit, there is a decorator for just this purpose. Is there
> something similar for Test::Unit?
>
> Michael
>
> --
> Michael Schuerig
> (E-Mail Removed)
> http://www.schuerig.de/michael/
>
>


You should be able to put the data you need initialised only once in
the initialize method. I think.

Farrel

 
Reply With Quote
 
 
 
 
Robert Dober
Guest
Posts: n/a
 
      02-26-2007
On 2/26/07, Michael Schuerig <(E-Mail Removed)> wrote:
>
> For a performance test I need to populate the database with a large
> number of records. The individual test cases only read the database
> contents. It is rather time consuming and, after all, unnecessary to do
> a full setup and teardown for each test case. I'd much prefer a clean
> way to do setup and teardown once for the entire TestCase subclass.
> AFAIR, in JUnit, there is a decorator for just this purpose. Is there
> something similar for Test::Unit?
>
> Michael
>
> --
> Michael Schuerig
> (E-Mail Removed)
> http://www.schuerig.de/michael/
>
>

I always use constants for that kind of problems.
For what you hide behind the constants is of course a matter of taste
sometimes I do something like the following, but that is just like me.

class << DatabaseProxy = Class.new
<init code>
def whatever...
end
def play_it_again_sam
end
def etcetc
end

class X < Test::Unit::TestCase

def testxxx...
DatabaseProxy.whatever

...
end

HTH
Robert
--
We have not succeeded in answering all of our questions.
In fact, in some ways, we are more confused than ever.
But we feel we are confused on a higher level and about more important things.
-Anonymous

 
Reply With Quote
 
Michael Schuerig
Guest
Posts: n/a
 
      02-26-2007
On Monday 26 February 2007, Farrel Lifson wrote:
> On 26/02/07, Michael Schuerig <(E-Mail Removed)> wrote:
> > For a performance test I need to populate the database with a large
> > number of records. The individual test cases only read the database
> > contents. It is rather time consuming and, after all, unnecessary
> > to do a full setup and teardown for each test case.


> You should be able to put the data you need initialised only once in
> the initialize method. I think.


I don't think so. When I have

class MyPerformanceTest < Test::Unit::TestCase
def initialize
...
end

def test_something
...
end

def test_something_else
...
end
...
end

for each of the individual test methods a fresh instance of
MyPerformanceTest is created and initialized.

Michael

--
Michael Schuerig
(E-Mail Removed)
http://www.schuerig.de/michael/

 
Reply With Quote
 
Michael Schuerig
Guest
Posts: n/a
 
      02-26-2007
On Monday 26 February 2007, Robert Dober wrote:
> On 2/26/07, Michael Schuerig <(E-Mail Removed)> wrote:
> > For a performance test I need to populate the database with a large
> > number of records. The individual test cases only read the database
> > contents. It is rather time consuming and, after all, unnecessary
> > to do a full setup and teardown for each test case. I'd much prefer
> > a clean way to do setup and teardown once for the entire TestCase
> > subclass. AFAIR, in JUnit, there is a decorator for just this
> > purpose. Is there something similar for Test::Unit?


> I always use constants for that kind of problems.
> For what you hide behind the constants is of course a matter of taste
> sometimes I do something like the following, but that is just like
> me.
>
> class << DatabaseProxy = Class.new
> <init code>
> def whatever...
> end
> def play_it_again_sam
> end
> def etcetc
> end
>
> class X < Test::Unit::TestCase
>
> def testxxx...
> DatabaseProxy.whatever
>
> ...
> end


You've lost me there. I don't understand how this is supposed to work,
in particular, how it achieves my aim of setting up and tearing down
the database only once per suite.

Are you using the initialization of the constant to set up the database?
I'm not sure that this approach plays nicely with multiple test suites
run by rake.

Michael

--
Michael Schuerig
(E-Mail Removed)
http://www.schuerig.de/michael/

 
Reply With Quote
 
Brian Candler
Guest
Posts: n/a
 
      02-26-2007
On Tue, Feb 27, 2007 at 03:02:06AM +0900, Michael Schuerig wrote:
> For a performance test I need to populate the database with a large
> number of records. The individual test cases only read the database
> contents. It is rather time consuming and, after all, unnecessary to do
> a full setup and teardown for each test case. I'd much prefer a clean
> way to do setup and teardown once for the entire TestCase subclass.


Options I can think of:

1. Use a class variable - or even a global variable - to record when the
setup has been done, so it only gets done once.

2. Write all your tests which depend on this database as a single test. You
can always call out to other methods if you like.

def test_everything
init_database
do_1
do_2
... etc
end

 
Reply With Quote
 
Robert Dober
Guest
Posts: n/a
 
      02-26-2007
On 2/26/07, Michael Schuerig <(E-Mail Removed)> wrote:
> On Monday 26 February 2007, Robert Dober wrote:
> > On 2/26/07, Michael Schuerig <(E-Mail Removed)> wrote:
> > > For a performance test I need to populate the database with a large
> > > number of records. The individual test cases only read the database
> > > contents. It is rather time consuming and, after all, unnecessary
> > > to do a full setup and teardown for each test case. I'd much prefer
> > > a clean way to do setup and teardown once for the entire TestCase
> > > subclass. AFAIR, in JUnit, there is a decorator for just this
> > > purpose. Is there something similar for Test::Unit?

>
> > I always use constants for that kind of problems.
> > For what you hide behind the constants is of course a matter of taste
> > sometimes I do something like the following, but that is just like
> > me.
> >
> > class << DatabaseProxy = Class.new
> > <init code>
> > def whatever...
> > end
> > def play_it_again_sam
> > end
> > def etcetc
> > end
> >
> > class X < Test::Unit::TestCase
> >
> > def testxxx...
> > DatabaseProxy.whatever
> >
> > ...
> > end

>
> You've lost me there. I don't understand how this is supposed to work,
> in particular, how it achieves my aim of setting up and tearing down
> the database only once per suite.
>
> Are you using the initialization of the constant to set up the database?
> I'm not sure that this approach plays nicely with multiple test suites
> run by rake.
>

I was trying to impress the girls

X = File.readlines("/etc/passwd")
class Test...

def test
X is here for you all the time

end

Is this better?

Cheers
Robert
> Michael
>
> --
> Michael Schuerig
> (E-Mail Removed)
> http://www.schuerig.de/michael/
>
>



--
We have not succeeded in answering all of our questions.
In fact, in some ways, we are more confused than ever.
But we feel we are confused on a higher level and about more important things.
-Anonymous

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
state of an object in setUp() of junit TestCase jimgardener Java 34 11-18-2010 03:08 AM
Per suite unit test setup and teardown Peter Hickman Ruby 7 09-10-2008 10:23 AM
Differerence between Test::Unit::TestCase and RUNIT::TestCase Scott Ruby 1 08-20-2005 08:49 PM
A testcase for a Queue like class. Antoon Pardon Python 1 04-15-2005 08:06 AM



Advertisments