2015-04-07 16 views
5

ich versuchte, es zu erhalten, indem:Wie Zugriff auf Spring ApplicationContext in junit @ BeforeClass statische Methode?

private static ApplicationContext applicationContext; 
@Autowired 
    public static void setApplicationContext(ApplicationContext applicationContext) { 
     AuditorTest.applicationContext = applicationContext; 
    } 

Aber es wie alle anderen Versuche, funktioniert nicht.

Wie autowire statisch ApplicationContext?

+0

Warum müssen Sie dies tun? –

+0

Um db vor jUnit-Tests zu füllen? –

+0

Sie müssen es einmal für den gesamten Testfall ausfüllen? –

Antwort

4

Sie können die Frühlingsbohnen nicht auf static Methoden autieren. Sie haben es eine Instanz Methode stattdessen zu machen, und lassen Sie es den Wert static Variablen zuweisen (das wird funktionieren):

@Autowired 
public void setApplicationContext(ApplicationContext applicationContext) { 
    AuditorTest.applicationContext = applicationContext; 
} 

Aber ich glaube nicht, das ist das, was Sie wollen. Ich denke, man sollte die Testklasse mit SpringJUnitRunner mit Anmerkungen versehen und @ContextConfiguration, und dann werden Sie in der Lage sein, die ApplicationContext dort autowire:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(...) // configuration location 
public class TestClass { 
    @Autowired 
    private ApplicationContext context; 
} 
+1

This Lösung funktioniert für den Zugriff auf den Kontext, aber wenn Sie es in @BeforeClass benötigen, können Sie nicht auf die nicht statische Variable zugreifen. Sie benötigen dies, wenn Sie eine Bean-Klasse haben, die bei der Initialisierung auf den Kontext zugreift. –

0

Wahrscheinlich könnten Sie jetzt eine Abhilfe herausgefunden. Kann anderen hier helfen.

Ich lief über das ähnliche Problem. Die meisten verfügbaren Springframework-Optionen erlauben keinen statischen Zugriff von ApplicationContext.

Die Problemumgehung ist einfach. Erstellen Sie Ihren eigenen ApplicationContext mithilfe von ClassPathXmlApplicationContext mithilfe der Bean-Konfiguration, jedoch statisch.

<code> 
public class BaseTestCase { 
    static { 
     AppicationContext context = new ClassPathXmlApplicationContext("test-config.xml"); 
      // Do what you want to do with the context 
      // Probably store in static variable to access somewhere else 
     } 
    } 
</code> 
Verwandte Themen