Frage

Der folgende Test zeigt, dass dieser Test bean zweimal von Spring initialisiert wird. Ich hoffe jemand kann mir sagen, warum das so ist, da es nur einmal sein sollte. Hier ist der Test:

import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {} )
public class TestAfterPropsSet implements InitializingBean {

private static final Logger logger = Logger.getLogger(TestAfterPropsSet.class);

@Test
public void test1() {
    logger.debug("Test1");
}

@Test
public void test2() {
    logger.debug("Test2");      
}

public void afterPropertiesSet() throws Exception {
    logger.debug("Bean Initialized");       
}
} // end class

Hier ist die Bean-Datei:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

und hier ist die Ausgabe:

2009-10-13 21:20:04,393 [TestAfterPropsSet.java 26] DEBUG - Bean Initialized
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 17] DEBUG - Test1
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 26] DEBUG - Bean Initialized
2009-10-13 21:20:04,393 [TestAfterPropsSet.java 22] DEBUG - Test2
War es hilfreich?

Lösung

Es ist kein Frühling Konvention. Sie sollten folgende JUnit Konventionen werden, das heißt Suite weite Initialisierung oder Rückbau sollte entsprechend in @BeforeClass und @AfterClass getan werden, oder Sie können @Autowire verwenden und lassen den Frühling Anwendungsbereich des Objekts behandeln.

Eine neue Suite wird für jeden Test konstruiert werden. Dies ist deutlicher in JUnit3, wo Sie eine neue Suite mit einem spezifizierten Testnamen erstellen hatte.

Werfen Sie einen Blick auf die JavaDoc :

  

Die Test-Anmerkung sagt JUnit, dass   die public void Methode, auf die es   gebunden ist, kann als Testfall ausgeführt werden.   führt das Verfahren, JUnit erste Konstrukte   eine neue Instanz der Klasse dann   ruft die kommentierten Methode. Alle   Ausnahmen durch den Test geworfen werden   von JUnit als Ausfall gemeldet. wenn nein   Ausnahmen geworfen werden, ist der Test   angenommen zu haben, zu erfolgreich ist.

Ihr Anwendungsfall ist ein bisschen verwirrend, da Ihr Test nicht tatsächlich etwas zu tun, und es gibt keine Bohne, die Sie verweisen. Standardmäßig wird die Spring-Beans mit dem Standardbereich deklariert = „Singletons“ -Attribut, so hatte man eigentlich eine Bohne erklärt, es wäre ein zwischengespeichert Singleton gewesen. Dies hat jedoch nichts mit der Methode der Ausführung zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top