Domanda

Il seguente test dimostra che questo fagiolo di prova viene inizializzata due volte entro la primavera. Sto sperando che qualcuno mi può dire perché è così, dal momento che dovrebbe essere soltanto una volta. Ecco la prova:

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

Ecco il file di fagioli:

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

ed ecco l'output:

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
È stato utile?

Soluzione

Non è una convenzione di primavera. Si dovrebbe essere seguenti convenzioni JUnit, l'inizializzazione vale a dire a livello di suite o decostruzione dovrebbe essere fatto in @BeforeClass e @AfterClass di conseguenza, oppure è possibile utilizzare @Autowire e lasciare gestire Primavera portata dell'oggetto.

Una nuova suite sarà costruito per ogni test. Questo è più evidente in JUnit3 dove si doveva creare una nuova suite utilizzando un nome di test specificato.

Date un'occhiata alla JavaDoc :

  

L'annotazione di test JUnit dice che   il metodo public void cui è   divisoria può essere eseguito come un banco di prova. Per   eseguire il metodo, JUnit primi costrutti   un'istanza fresca della classe poi   invoca il metodo annotato. Qualsiasi   eccezioni generate dal test saranno   riportato da JUnit come un fallimento. Se no   eccezioni sono gettati, il test è   presume di avere avuto successo.

Il caso d'uso è un po 'sconcertante in quanto il test non è in realtà facendo nulla e non c'è di fagioli, che si fa riferimento. Per impostazione predefinita, i fagioli di primavera sono dichiarati con l'ambito predefinito = "Singleton" attributo, quindi abbiamo dovuto effettivamente dichiarato un fagiolo, sarebbe stato un singleton cache. Tuttavia, questo non ha nulla a che fare con l'esecuzione del metodo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top