Hubo algunas soluciones propuestas a la pregunta "Cómo probar sentencias SQL en una aplicación" -
El tercero era viable y busqué contenedores de prueba, que en realidad es una solución hermosa pero relativamente nueva. Como resultado, nuestra empresa es escéptica de adoptarlo.
Usamos Mybatis para acceder a PostgreSQL .
Otra forma sería recrear el esquema completo y completar las tablas requeridas antes de las pruebas. Aquí está el problema, podría crear y eliminar esquemas con tablas con el mismo nombre. Para evitar la colisión de nombres, tendría que cambiar el nombre del esquema, como resultado, incluso las consultas deberían cambiarse de nombre, lo que no es lo mejor. ¿Hay alguna manera de hacer esto sin cambiar las consultas pero apuntándolas al esquema ficticio?
NO debe cambiar sus consultas. En las pruebas, solo debe cambiar la URL de conexión que usará su aplicación. El problema es cómo hacer que esa URL funcione.
Para tener una cobertura de prueba completa, necesita la misma base de datos (como notó, h2 y otras bases de datos en memoria no son muy compatibles). postgres no tiene modo en memoria, por lo que debe administrar el ciclo de vida usted mismo. hay algunas decisiones que tienes que tomar. Algunos:
¿De dónde obtendrá la base de datos: requiere que todos los desarrolladores proporcionen postgres (instalación/docker/vagabundo) o automaticen la configuración?
cómo preparar db para las pruebas: configuración y limpieza manual del esquema?
cómo restablecer db entre pruebas: reiniciar? siempre revertir? contenido predefinido y definido por separado? algún tipo de operaciones inversas?
si y como hacer esas pruebas rapidas?
Hay algunas herramientas que pueden ayudarte a resolver algunos de los problemas:
testcontainers lo ayudará a proporcionar db.
dbunit : lo ayudará a preparar los datos para su prueba.
contras:
testegration : intenta proporcionarle un ciclo de vida completo, listo para usar y extensible (divulgación: soy un creador).
contras:
también puede llenar los huecos por su cuenta. como siempre es un intercambio: tiempo vs dinero
puede definir la configuración de la base de datos para fines de prueba y conectarse a su base de datos real para ejecutar pruebas. debe acceder a la configuración de la base de datos de prueba en las clases de prueba.
por ejemplo, si usa spring e hibernate para conectarse a la base de datos, puede definir un archivo xml de configuración de prueba de hibernación donde se conecta a la base de datos de prueba. luego, en sus clases de prueba, use este archivo de configuración de la siguiente manera:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguratiion({testHibernate.xml, testSpring.xml , .... }) @TestExecutionListeners({...}) public class TestClass { .... @Test public void test1(){ ... } }por lo tanto, puede acceder a su fábrica de sesiones de hibernación de prueba para ejecutar sus consultas.