Pregunta

La siguiente ensayo ilustra que este grano de prueba se inicializa dos veces por resorte. Estoy esperando que alguien me puede decir por qué esto es así, ya que sólo debe ser una vez. Aquí está la prueba:

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

Aquí está el archivo de frijol:

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

Y aquí está la salida:

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
¿Fue útil?

Solución

No es una convención de primavera. Usted debe estar siguiendo las convenciones JUnit, la inicialización o la deconstrucción es decir, de todo el conjunto debe hacerse en @BeforeClass y @AfterClass en consecuencia, o se puede utilizar @Autowire y dejar que la primavera manejar el alcance del objeto.

Una nueva suite se construirá para cada prueba. Esto es más evidente en JUnit3 donde se tenía que crear un nuevo conjunto utilizando un nombre de ensayo especificado.

Tome un vistazo a la JavaDoc :

  

La anotación de prueba JUnit que dice   el método public void en los que es   adjunta se puede ejecutar como un caso de prueba. Para   ejecutar el método, JUnit primeras construcciones   un nuevo ejemplo de la clase entonces   invoca el método anotado. Cualquier   excepciones producidas por la prueba serán   reportado por JUnit como un fracaso. Si no   se lanzan excepciones, la prueba es   supone que han tenido éxito.

Su caso de uso es un poco desconcertante ya que su prueba no es en realidad haciendo nada y no hay frijol, que se hace referencia. Por defecto, los granos de la primavera se declaran con el ámbito predeterminado = "Singleton" atributo, por lo que tuvo que llegó a declarar un grano, que habría sido un producto único en caché. Sin embargo, esto no tiene nada que ver con la ejecución del método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top