Question

Le test suivant montre que ce grain de test est initialisé deux fois au printemps. J'espère que quelqu'un peut me dire pourquoi il en est ainsi, car il ne devrait être qu'une seule fois. Voici le 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

Voici le fichier de haricot:

<?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>

et est ici la sortie:

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
Était-ce utile?

La solution

Il est pas une convention de printemps. Vous devriez suivre les conventions JUnit, à savoir l'initialisation suite à l'échelle ou la déconstruction devrait se faire dans @BeforeClass et @AfterClass en conséquence, ou vous pouvez utiliser @Autowire et laissez ressort gérer la portée de l'objet.

Une nouvelle suite sera construite pour chaque test. Ceci est plus apparent dans JUnit3 où vous deviez créer une nouvelle suite en utilisant un nom de test spécifié.

Jetez un oeil à la JavaDoc :

  

L'annotation de test indique que JUnit   la méthode public void auquel il est   ci-joint peut être exécuté en cas de test. Pour   exécuter la méthode, JUnit premières constructions   une nouvelle instance de la classe alors   appelle la méthode annotée. Tous   exceptions lancées par l'épreuve seront   rapporté par JUnit comme un échec. Sinon   des exceptions sont levées, le test est   supposés avoir réussi.

Votre cas d'utilisation est un peu déroutante car votre test ne fait quoi que ce soit et il n'y a pas de haricots, que vous faites référence. Par défaut, les haricots de printemps sont déclarées par le champ par défaut d'attribut = « singleton », de sorte que vous aviez effectivement déclaré un haricot, il aurait été un singleton mises en cache. Cependant, cela n'a rien à voir avec l'exécution de la méthode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top