2009-09-08 9 views
0

J'ai un problème de test d'unité où une classe a une variable statique qui veut charger le Ctx d'application de ressort.Comment faire pour simuler une variable statique dans Java en utilisant JMock

Cette classe ne sort pas de l'usine de haricots et je ne peux pas changer ce fait.

static ApplicationContext applicationContext = ...; 

Cela fonctionne très bien, mais il est difficile de JMock, ou du moins je ne sais pas d'une manière et jusqu'à ce que je peux le printemps Ctx veut démarrer. Pas idéal pour une situation de test unitaire.

Y a-t-il un travail que personne ne connaît? J'ai la possibilité de changer la variable statique à tout ce que je souhaite ..

Merci.

Répondre

1

Résolu moi-même.

Était vraiment simple à la fin. Justed besoin d'envelopper mon statique dans une classe que je pourrais alors se moquer.

public class ApplicationContextHolder implements ApplicationContextHoldable { 

    protected static ApplicationContext applicationContext = ...; 

    @Override 
    public ApplicationContext getApplicationContext() { 
     return ApplicationContextHolder.applicationContext; 
    } 

} 
0

Nice. L'ironie est que la seule chose que le printemps est bon à la gestion est singletons, donc il ne devrait pas être nécessaire pour les variables statiques :)

+0

C'est vrai, mais dans le monde réel, vous n'avez pas toujours cette option :) – JamesC

0

Vous pouvez utiliser la réflexion basée JMock API pour définir des champs privés/statiques

import static mockit.Deencapsulation.setField; 
    //Test method 
    public void testSample { 
     setField(Sample.class,"isPrivate",true); 
     setField(Sample.class,"isStatic",true); 
    } 

    private class Sample { 
     private boolean isPrivate = false; 
     private boolean isStatic = false; 

    } 
Questions connexes