DbUnit: Identificación del problema con la generación de la subasta
-
19-09-2019 - |
Pregunta
Estoy utilizando DbUnit junto con Unitils, que funciona muy bien la mayor parte del tiempo.
Hoy he encontrado un problema extraño.
La situación es la siguiente:
- I utilizar Hibernate, y tener identificación con el "incremento" del generador:
<id name="Id"> <generator class="increment"/> </id>
- preparo conjunto de datos de prueba, donde id máxima es 5.
- utilizo estrategia de carga limpieza de inserción.
- He
test1
dos métodos de ensayo ytest2
, cada una fila de añadir en esta tabla. - Después de fila método
test1
recién agregado tiene id = 6. - Después de fila método
test2
recién creada tiene id = 7.
Esto es todo bien y me da qué esto es así. Es un problema desde la perspectiva de mantenimiento sin embargo. Si alguna vez Agregar método tercera prueba entre los dos, el método test2
de repente fallar a pesar de que nada ha cambiado, sólo porque obtendrá fila diferente, id.
¿Hay alguna forma de forzar DbUnit o Hibernate para calcular siguiente valor de identificación antes de cada método de prueba?
Solución
En primer lugar, se debe proporcionar el conjunto completo de datos, sí con id
también. Si no es así, no mida o basar su prueba sobre ids
. ¿Por qué no probar? porque su cosa ya bien probado y fiable. Siempre recuerde que nunca probar bibliotecas de terceros, la mayoría de ellos ya bien probados. Sin embargo, parece casi imposible no dependiendo de id
s. Estoy de acuerdo, usted debe escribir una clase simulada para hacer frente a este problema para usted, o puede ser que usted puede proporcionar algún método setter para sobrescribir el valor generado por su propia cuenta.
La segunda opción es siempre empezar el caso de prueba con el cuadro vacío. Puede escribir un accesorio para limpiar la mesa para que, antes de cada caso de prueba.
Otros consejos
La solución no es confiar en los identificadores generados:
- que están fuera del control de la prueba.
- si los haces controlados por la prueba, que ya no están probando el bajo prueba de clase