Duda SQLite: campos autoincrement y tests

Maldercito

Buenas a todos, tengo una duda bastante tonta.

Estoy programando unos tests para una aplicación con una base de datos relacional y uso SQLite para las pruebas. El caso es que tengo una consulta en la que busco a un elemento por un id concreto, entonces al iniciar el test creo ese objeto con el id concreto, pero al ser autoincremental se lo pasa por el forro y pone el siguiente que le toque.

La pregunta es, ¿hay alguna manera de insertar el elemento con el id que yo quiera sin que me lo cambie por el autoincremental que le toca?

La posible solución que manejo es hacer un truncate a la tabla al iniciar el test, pero me gustaría saber si hay otra de hacerlo.

Merkury

La forma es no usar la base de datos, si no un mock.

De todas formas el usar el ID para identificar un campo igual no es lo mejor, porque como tu has dicho, el autoincremento te lo jode.

1 1 respuesta
Maat

al insertar el elemento que quieras añade también el campo del autoincremental poniendo el numero que quieras, siempre que ese id no este ya en la tabla te va a colocar el que hayas puesto tu aunque la columna de la tabla sea autoincremental.

Por ejemplo si quiero que los ids de esa tabla en concreto empiecen por 1000, el primer elemento que inserte en la tabla lo añado con el id 1000. Los sucesivos elementos que inserte seguirán a partir de este sin tener que ponerle ya ese campo.

1 1 respuesta
Maldercito

#2 tienes razón. No había pensado en hacer un mock. Ahora es tarde, pero para la próxima es lo que haré. Y también tienes razón en lo otro, mala idea usar un autoincremental en este caso cuando va a haber un número de elementos determinado.

He resuelto de manera algo chapucera creando el elemento y a continuación haciéndole un update del id al que debe ser.

Gracias por los consejos.

#3 Eso es lo que hice. Pero misteriosamente SQLite me lo sobreescribe, no sabía que tenía ese comportamiento.

2 respuestas
Maat

#4 también podrías hacer un nuevo campo de id de referencia en el que seas tu el que lo pone siempre manualmente, así aunque el incremental lo cambie los podrías tener a tu gusto pero no lo veo muy viable ya que al insertar un nuevo elemento siempre tendrias que consultar antes el ultimo que pusiste xd.

Merkury

#4 Nunca es tarde para hacer las cosas mejor :)

r2d2rigo

Para esto esta el setup/teardown: cada test suite deberia crear el entorno sobre el que va a trabajar desde 0, y cepillarselo al acabar.

1

Usuarios habituales

  • r2d2rigo
  • Merkury
  • Maat
  • Maldercito