Kotlin / Java – Datos de la database de testing proporcionados REST API

Estoy intentando probar una connection a mi database y tratar de configurar una database simulada. Solo no tengo idea de cómo hacerlo. ¿Cómo es posible con cualquier marco de testing para burlarse de una database y probar mi método (se muestra a continuación) getUserById ?

Como esto está usando jdbc sin formatting, ¿cómo puedo sobrescribir este método getConnection() para usar la database simulada en lugar de la real? ¿O no es este el path a seguir?

No he probado nunca una connection / salida de database de API, así que no sé por dónde empezar.

Esta es mi class jdbc:

 import java.sql.Connection import java.sql.DriverManager import java.sql.ResultSet import java.sql.Statement import java.util.ArrayList import java.util.Properties import bye.domain.* class jdbcTrial { val url: String = "jdbc:postgresql://196.21.2.12:5432/events" //val props: Properties = Properties(); val DB_DRIVER = "org.postgresql.Driver"; // used for getting the comments fun getUserById(id: Int): User { val query = "select * from user where id = ${id};"; return getSingleUser(query) } /* Singles */ fun getSingleUser(query: String): User { val conn = this.getConnection() var user = User() val statement: Statement = conn.createStatement() val rs: ResultSet = statement.executeQuery(query) while (rs.next()) { user = convertToUser(rs) } return user } /* Converting */ fun convertToUser(rs: ResultSet): User { val id = rs.getInt("id") val uname = rs.getString("username") val type = rs.getString("usertype") return User(id, uname, type) } fun getConnection(): Connection { Class.forName(DB_DRIVER).newInstance() val conn: Connection = DriverManager.getConnection(url, "username", "password") return conn } } 

En el mundo real, puede ver al less las siguientes forms:

  1. no lo testings el código es simple, las testings de DB pueden ser costosas, lentas, etc.
  2. testings manuales en 1 instancia común instalada remotamente. bastante inútil, ya que no le permite (o lo hace realmente difícil) experimentar con el cambio de esquema, la eliminación de tablas, datos, etc.
  3. para testings use db en memory (h2, hsql, etc.). te permite comenzar bastante fácil porque comienza y detiene db bajo demanda. los problemas son: aún tendrá que borrar db entre transactions (si realiza testings transaccionales, puede usar frameworks como dbUnit o tener control total y hacerlo manualmente) y de hecho no testing su db. usted testing algún otro DB
  4. use el mismo proveedor de db que la producción db. Estas son las mejores testings, pero requieren un poco de reflexión sobre la configuration de la infraestructura: debe iniciar su db para realizar testings (docker automático, inicio manual, db local / remoto instalado permanentemente), debe preparar db antes de cada testing (esquema, tablas, datos iniciales, borrado de datos existentes, reinicio de secuencias, etc.) y ciérrelo después de las testings.

Recomiendo el último usando:

  1. antes de la configuration de todas las testings que intenta conectarse a la database existente y si no hay ninguna escucha de DB, entonces inicia la window acoplable con esa database
  2. ruta de acceso que crea la estructura de esquema y db
  3. testing la configuration que borra todos los datos, restaura las secuencias, etc. antes de cada testing
  4. cada testing inserta datos que se necesitarán durante esa testing
  5. jvm shutdown hook que detiene el acoplador si se inició al principio