2010-12-10 18 views
0


Ich 3.0.4 ein kleines Problem in Bezug auf die @ContextConfiguration Anmerkung mit Feder gegenüber. Ich möchte sie zur Laufzeit über den ApplicationContext (wenn möglich) abrufen.Apportieren Kontextkonfiguration zur Laufzeit

Sagen wir, ich diese Klasse haben:

@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 
    } 
} 

Es wäre in meiner Situation sehr nützlich sein, ich habe ein wenig im Web gesucht und haben nicht viele Ideen, wie dies zu erreichen, gefunden, Vielleicht können SO-Experten mir dabei helfen.

Dank

+0

Beachten Sie, dass Ihre Klasse nicht 'foo()' genannt werden kann. Es sollte 'Foo' genannt werden – Bozho

+0

Dort gehen Sie;) – ALOToverflow

Antwort

3

Ich bin für eine öffentliche Nützlichkeit haben, dass sich nicht bewusst, aber der einfachste Weg wäre manuell die Anmerkung zu analysieren:

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

Danke. So ziemlich, wonach ich gesucht habe. Zu Ihrer Information: Sie können die Annotation auch dann abrufen, wenn die Klasse nicht instanziiert ist. – ALOToverflow

+0

Ja, das stimmt. Deshalb habe ich es als 'Foo.class' bezeichnet – Bozho

0

Überprüfen Sie, ob die Umsetzung der ApplicationContextAware Schnittstelle wird Ihnen helfen, . Dies sollte Ihnen Zugriff auf den Anwendungskontext bieten.

0

Sie können nicht dynamisch die Orte in der @ContextConfig Anmerkung angeben. Sie können jedoch stattdessen einen TestExecutionListener mit der entsprechenden Anmerkung verwenden. In beforeTestMethod() konnte der Listener den ApplicationContext aus dem TestContext abrufen und die erforderlichen XML-Dateien manuell laden.

Wenn Sie verschiedene XML-Dateien für jeden Test wollen, sollten Sie auch zu TestContext.markApplicationContextDirty() in einer @After Methode aufrufen.