2010-12-10 30 views
0


Je suis confronté à un petit problème concernant l'annotation @ContextConfiguration avec Spring 3.0.4. Je voudrais les récupérer à l'exécution via l'applicationContext (si possible).Récupération de la configuration de contexte à l'exécution

Disons que j'ai cette classe:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"foo.xml", "bar.xml"}) 
public class Foo() extends AbstractTransactionalJUnit4SpringContextTests { 
    @Before 
    public void before() { 
     //retrieve foo.xml and bar.xml here 
    } 
} 

Il serait utile dans ma situation, je l'ai regardé sur le web un peu et ne l'ai pas trouvé beaucoup d'idées sur la façon d'y parvenir, peut-être que les experts peuvent m'aider à ce sujet.

Merci

+0

Notez que votre classe ne peut pas s'appeler 'foo()'. Il devrait être appelé 'Foo' – Bozho

+0

Voilà, vous allez;) – ALOToverflow

Répondre

3

Je ne suis pas au courant d'avoir un service public pour cela, mais la façon la plus simple serait d'analyser manuellement l'annotation:

String[] locations = 
    Foo.class.getAnnotation(ContextConfiguration.class).locations(); 
+0

Merci. À peu près ce que je cherchais. Pour info, vous pouvez récupérer l'annotation même si la classe n'est pas instanciée. – ALOToverflow

+0

oui, c'est vrai. C'est pourquoi je l'ai appelé «Foo.class» – Bozho

0

Vérifiez si la mise en œuvre de l'interface ApplicationContextAware vous aidera . Cela devrait vous permettre d'accéder au contexte de l'application.

0

Vous ne pouvez pas spécifier dynamiquement les emplacements dans l'annotation @ContextConfig. Mais, vous pouvez utiliser un TestExecutionListener à la place, avec l'annotation appropriée. Dans beforeTestMethod(), l'écouteur peut obtenir ApplicationContext à partir de TestContext et charger les fichiers xml nécessaires manuellement.

Si vous voulez des fichiers xml différents pour chaque test, vous devez également appeler TestContext.markApplicationContextDirty() dans une méthode @After aussi.