How to instantiate a shared resource in JUnit

java, junit

Solution

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();
}

Problem

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?

Original source