Estoy programando en Java y mis aplicaciones utilizan mucho DB. Por lo tanto, es importante para mí poder probar el uso de mi base de datos fácilmente.
¿De qué se tratan las pruebas de base de datos? Para mí, deberían proporcionar dos requisitos simples:
- Verifique la sintaxis SQL.
- Más importante aún, verifique que los datos estén seleccionados / actualizados / insertados correctamente, de acuerdo con una situación dada.
Bueno, parece que todo lo que necesito es una base de datos.
Pero en realidad, prefiero no, ya que hay pocas dificultades para usar una base de datos para una prueba:
- "Consiga una base de datos de prueba, ¿qué tan difícil podría ser?" - Bueno, en mi lugar de trabajo, tener un DB de prueba personal es bastante imposible. Tienes que utilizar una base de datos "pública", que sea accesible para todos.
- "Estas pruebas no son rápidas ..." - Las pruebas de DB tienden a ser más lentas que las pruebas habituales. Realmente no es ideal tener pruebas lentas.
- "¡Este programa debería manejar cualquier caso!" - Se vuelve algo molesto e incluso imposible intentar simular todos y cada uno de los casos en una base de datos. Para cada caso, se debe realizar una cierta cantidad de consultas de inserción / actualización, lo cual es molesto y lleva tiempo.
- "Espera un segundo, ¿cómo sabes que hay 542 filas en esa tabla?" - Uno de los principios fundamentales en las pruebas es poder probar la funcionalidad de una manera diferente a la de su código probado. Cuando se usa una base de datos, generalmente hay una forma de hacer algo, por lo tanto, la prueba es exactamente la misma que el código central.
Entonces, puede darse cuenta de que no me gustan las bases de datos cuando se trata de pruebas (por supuesto, tendré que llegar a esto en algún momento, pero prefiero llegar más tarde en mis pruebas, después de encontrar la mayoría de los errores usando el resto de los métodos de prueba). ¿Pero qué estoy buscando?
Estoy buscando una forma de simular una base de datos, una base de datos simulada, usando el sistema de archivos o simplemente la memoria virtual. Pensé que tal vez hay una herramienta / paquete Java que permite simplemente construir (usando la interfaz de código) un simulacro de base de datos por prueba, con tablas y filas simuladas, con verificación de SQL y con una interfaz de código para monitorear su estado (en lugar de usar SQL ).
¿Está familiarizado con este tipo de herramienta?
Editar: ¡ Gracias por las respuestas! Aunque estaba pidiendo una herramienta, también me brindó algunos consejos sobre el problema :) Me llevará algún tiempo revisar sus ofertas, así que no puedo decir ahora si sus respuestas fueron satisfactorias o no.
De todos modos, aquí hay una mejor vista de lo que estoy buscando: imagina una clase llamada DBMonitor, que una de sus características es encontrar el número de filas en una tabla. Aquí hay un código imaginario de cómo me gustaría probar esa característica usando JUnit:
public class TestDBMonitor extends TestCase {
@Override
public void setUp() throws Exception {
MockConnection connection = new MockConnection();
this.tableName = "table1";
MockTable table = new MockTable(tableName);
String columnName = "column1";
ColumnType columnType = ColumnType.NUMBER;
int columnSize = 50;
MockColumn column = new MockColumn(columnName, columnType, columnSize);
table.addColumn(column);
for (int i = 0; i < 20; i++) {
HashMap<MockColumn, Object> fields = new HashMap<MockColumn, Object>();
fields.put(column, i);
table.addRow(fields);
}
this.connection = connection;
}
@Test
public void testGatherStatistics() throws Exception {
DBMonitor monitor = new DBMonitor(connection);
monitor.gatherStatistics();
assertEquals(((MockConnection) connection).getNumberOfRows(tableName),
monitor.getNumberOfRows(tableName));
}
String tableName;
Connection connection;
}
Espero que este código sea lo suficientemente claro para entender mi idea (disculpe los errores de sintaxis, estaba escribiendo manualmente sin mi querido Eclipse: P).
Por cierto, utilizo ORM parcialmente y mis consultas SQL sin procesar son bastante simples y no deberían diferir de una plataforma a otra.