2009-11-24 3 views
2

J'ai remarqué que jUnit exécute le constructeur de ma classe de test pour chaque méthode testée. Voici un exemple:Comment instancier une ressource partagée dans JUnit


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

donne le résultat suivant:

 
TestTest() 
test1() 
TestTest() 
test2() 
TestTest() 
test3() 

appeler le constructeur à BigUglyResource est trop de temps, je préfère construire une seule fois. Je sais que vous pouvez utiliser @BeforeClass pour exécuter une méthode une fois, mais @BeforeClass est uniquement pour les méthodes statiques. Les méthodes statiques ne peuvent pas accéder à une propriété de classe comme BigUglyResource dans l'exemple ci-dessus. Autre que la construction d'un Singleton, quelles sont les options?

Répondre

5

Vous ne pouvez pas déclarer le BigUglyResource statique? C'est comme ça que je le fais normalement.

private static BigUglyResource bur; 

@BeforeClass 
public static void before(){ 
    bur=new BigUglyResource(); 
} 
+0

Je suis surpris que cela ne m'est pas venu à l'esprit. – User1

1

Vous pouvez faire "bur" statique:

protected static BigUglyResource bur; 

Et utiliser @BeforeClass.