tags:

views:

54

answers:

2

I noticed that jUnit runs the constructor of my test class for each method being tested. Here's an example:


public class TestTest {
    protected BigUglyResource bur;
    public TestTest(){
     bur=new BigUglyResource();
     System.out.println("TestTest()");
    }
    @Test
    public void test1(){
     System.out.printf("test1()\n");
    }

    @Test
    public void test2(){
     System.out.printf("test2()\n");
    }
    @Test
    public void test3(){
     System.out.printf("test3()\n");
    }
}
Gives the following result:
TestTest()
test1()
TestTest()
test2()
TestTest()
test3()

Calling the constructor to BigUglyResource is too time-consuming, I'd prefer to build it only once. I know you can use @BeforeClass to run a method once, but @BeforeClass is only for static methods. Static methods can't access a class property like BigUglyResource in the example above. Other than building a Singleton, what options are there?

+1  A: 

You could make "bur" static:

protected static BigUglyResource bur;

And use @BeforeClass.

Russ Hayward
+3  A: 

Can't you declare the BigUglyResource static? This is how I normally do it.

private static BigUglyResource bur;

@BeforeClass
public static void before(){
   bur=new BigUglyResource();
}
bruno conde
I'm surprized this didn't occur to me.
User1