unitarias unitaria una tutorial test será qué que pruebas prueba método indica hacer español ejemplos configuracion como anotación java mysql spring spring-test

java - unitaria - qué anotación indica que un método será una prueba



¿Cómo rellenar la base de datos solo una vez antes de los métodos @Test en Spring Test? (3)

En caso de que sea Spring Boot, puede mencionar múltiples scripts para iniciar antes de las pruebas a través de

spring.datasource.data=classpath:accounts.sql, classpath:books.sql, classpath:reviews.sql

Mi siguiente problema al probar la capa de servicio spring con junit4 es: cómo llamar a un script que llena la base de datos solo una vez antes de todos los métodos @Test: quiero ejecutar esto una vez antes de todos los @Tests:

JdbcTestUtils.executeSqlScript(jdbcTemplate(), new FileSystemResource( "src/main/resources/sql/mysql/javahelp-insert.sql"), false);

Intenté usar @PostConstruct en mi clase GenericServiceTest (extendido por clases de prueba). Resultó que se llama a @PostConstruct cada vez antes de cada método @Test. Interesante es que incluso los métodos anotados en @Autowired of GenericServiceTest se llaman antes de cada método @Test.

No quiero llenar la base de datos antes de cada clase de prueba, sino solo una vez al inicio de la prueba de primavera.

¿Cómo ejecutar el método anterior solo una vez antes de todos los métodos @Test con Spring Testing Framework y Junit4?

¡Gracias!


Sobre la base de la respuesta de Alfredos, esta es una forma de inyectar información de la base de datos sin llamar al script predeterminado de la base de datos incrustada. Por ejemplo, esto puede ser útil cuando desea construir automáticamente el DDL para usted, al menos en las pruebas.

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"/applicationContext.xml"}) public class TestClass { @Autowired private ApplicationContext ctx; private JdbcTemplate template; @Autowired public void setDataSource(DataSource dataSource) { template = new JdbcTemplate(dataSource); } private static boolean isInitialized = false; @Before public void runOnce() { if (isInitialized) return; System.out.println("Initializing database"); String script = "classpath:script.sql"; Resource resource = ctx.getResource(script); JdbcTestUtils.executeSqlScript(template, resource, true); isInitialized = true; } }

De esta manera, el método runOnce() se llama una vez y solo una vez para la ejecución de prueba. Si realiza un campo de instancia isInitialized (no estático), se llamará al método antes de cada prueba. De esta forma, puede soltar / repoblar las tablas, si es necesario, antes de cada ejecución de prueba.

Tenga en cuenta que esta sigue siendo una solución bastante rápida y sucia, y la forma sensata de manejar la base de datos está de acuerdo con la respuesta de Ralph.


Utilice el soporte de base de datos integrada de Springs

<jdbc:embedded-database id="dataSource"> <jdbc:script location="classpath:myScript.sql"/> <jdbc:script location="classpath:otherScript.sql"/> </jdbc:embedded-database>

o Springs Inicializar soporte de base de datos

<jdbc:initialize-database data-source="dataSource"> <jdbc:script location="classpath:myScript.sql"/> <jdbc:script location="classpath:otherScript.sql"/> </jdbc:initialize-database>

@Ver http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html#jdbc-embedded-database-support