java - issues - Fuente de datos Spring-boot cometer problemas
spring boot samples (3)
Mi aplicación utiliza Spring-Boot 1.4.1.RELEASE y la configuración de mi fuente de datos es la siguiente;
spring:
datasource:
url: ***
username: ***
password: ***
driver-class-name: oracle.jdbc.driver.OracleDriver
initial-size: 1
max-active: 100
max-idle: 30
min-idle: 1
max-wait: 0
pool-prepared-statements: true
max-open-prepared-statements: 3
El problema es que el último caso de mi prueba de integración, si contiene una lógica de configuración @Sql
, no puede confirmar la última configuración de SQL. El problema ocurre rara vez debido al reordenamiento de los casos, y al hecho de que solo hay un puñado de casos con lógica de configuración para preparar DB. No hay configuración, excepto la de OracleDB, y eso está en ConfigClass
.
@SpringBootTest(classes = ConfigClass.class)
public class EtcTest {
@After
public void teardown() {
// teardwon X, Y, & Z
}
@Test
@Sql("setupX.sql")
@Sql("setupY.sql")
@Sql("setupZ.sql")
public void get_fromDb() {
List<Etc> list = buildExpectedList();
Obj expected = buildExpected();
Obj actual = getCallToAPI();
assertThat(rs.getX()).isEqualTo(expected.getX());
assertThat(rs.getY()).isEqualTo(expected.getY());
assertThat(rs.getZ()).containsAll(list);
}
}
El problema, por ejemplo en el caso anterior, si fuera el último caso de integración, no puede confirmar el último SQL en las anotaciones @Sql
, concretamente SetupZ.sql
, pero los datos no faltan por completo, inserta la clave principal, y a veces columnA
, o columnB
, es como si algo realmente malo aquí.
¿Causaría esto la presencia o la ausencia de alguna configuración? Si no, ¿cuál sería el motivo?
Hola para las clases de prueba en lugar de la base de datos real, puede ir con bases de datos en memoria como DB2, derby y h2. proporciona la solución para su problema.
para el ejemplo de código, puede encontrar a continuación el repositorio jpa de datos de primavera de URL Caso de prueba en memoria
Intentarías usar JPA para persistir. La siguiente configuración estaría disponible:
spring.jpa.show-sql=true
Entonces podrías ver lo que salió mal.
Puedes trabajar con pruebas @Transactional
. Esto le permite ejecutar la prueba, verificar el resultado y hacer que BD se retrotraiga al estado previo a la prueba.