Y llegó Hibernate para quedarse

Hace casi tres meses que comenzamos el desarrollo y ya con toda la lógica de negocio implementada, planificamos poner en marcha Hibernate en el proyecto con Spring. El código estaba prácticamente escrito pero no se había probado, y es que, hasta el momento hemos desarrollado con una implementación fake de la capa de persistencia.

Utilizar una implementación fake en memoria ha sido un acierto total, nos hemos centrado en las características y la funcionalidad de la aplicación y hemos desarrollado colecciones de objetos que hemos llamado Escenarios para instanciarlos cada vez que arrancamos el servidor y con cada test.

Sin embargo, no ha sido tan acierto el no mantener los tests. Para cada historia de usuario, procurábamos escribir un test que luego no hemos ejecutado antes de actualizar en el repositorio. Por ello, mis tareas para integrar Hibernate han sido:

1. Crear la base de datos con el plugin Hibernate Tools para Eclipse.

2. Definir los contextos de pruebas y de ejecución.

3. Arreglar los tests con la implementación fake de la persistencia, y una vez que estaba seguro de que estos tests funcionaban:

4. Arreglar los tests para que pasasen con la implementación Hibernate.

Tras crear la base de datos, lo primero que hice fue eliminar las restricciones SQL. Prefiero tener el control total sobre la información y manejarla desde mi lógica de negocio a someterme a los caprichos de la capa de persistencia. Lo segundo y más feo, utilizar la anotación @NotFound de Hibernate para que ignore cuando no encuentra la instancia de la que depende el objeto que se carga.

En el cuarto paso me he encontrado con algunos errores comunes al usar en primer lugar una implementación en memoria:

– Excepciones “Transient object”. Por ejemplo: Un objeto Position referenciado por una instancia User que, al guardar esta, Hibernate se queja por no haber guardado la otra antes. En la implementación en memoria esto no era un problema.

– Comparación de objetos con ==. Sí, lo he visto, lo hemos escrito. En mi defensa diré que fue sólo una vez y que las variables tenían pinta de int.

Como conclusión, sólo una: Ya que se escriben tests, hay que mantenerlos aunque la adrenalina recorra nuestro cuerpo y necesitemos escribir y escribir funcionalidad.

Anuncios

El entorno de pruebas de Paypal

Para un desarrollador, una de las características que más valora en un servicio de pago es la capacidad de probar el servicio en un entorno virtual. Sobre todo en el campo financiero. Poder poner a prueba la aplicación con los diferentes casos de uso de éste y simular transferencias permite depurar la aplicación y fortalecerla para evitar en la puesta en producción errores que conlleven usuarios insatisfechos y pérdidas económicas no sólo para los responsables de la aplicación si no también para usuarios.

            Hay pocos servicios de pago que ofrezcan un entorno virtual donde realizar transferencias ficticias como la sandbox de Paypal y esta característica puede desequilibrar la balanza hacia el servicio de pago que la posea. Lamentablemente, Coinbase es uno de esos servicios que no ofrecen entorno de pruebas.

            Para usar el entorno de pruebas, es necesario en primer lugar especificar al usar la API que se desea utilizar dicho entorno. En el SDK de Android consiste en añadir a la instancia de tipo Intent que lanzará la actividad de Paypal la constante PAYPAL_SANDBOX en el extra EXTRA_PAYPAL_ENVIRONMENT.

            El siguiente paso es crear cuentas virtuales para utilizarlas dentro del entorno de pruebas. Estas cuentas de Paypal virtuales se crean desde el sitio de desarrolladores de Paypal, en la pestaña Applications y la sección Sandbox Accounts.

Imagen

Al crear un usuario, se podrá configurar:

  • El país donde el usuario usará la cuenta.
  • El balance de su cuenta.
  • El tipo de cuenta: Si es personal o comerciante.
  • Si el banco enlazado a la tarjeta ha sido verificado.
  • El tipo de tarjeta de crédito (Visa, Mastercard…).

            Paypal ha desarrollado una interfaz web para el entorno de pruebas desde la que se pueden crear las cuentas de Paypal virtuales. Una vez creadas, para usar el entorno de pruebas tan sólo es necesario autenticarse en la pasarela de pagos a través de la aplicación con los credenciales de estas cuentas virtuales. Cualquier transferencia que se haga con estas cuentas será ficticia. Por seguridad, Paypal no permite utilizar cuentas reales en entorno de pruebas ni cuentas virtuales con la pasarela en producción. Si se intenta la autenticación con una cuenta real de Paypal en el entorno de pruebas, la respuesta será que el nombre de usuario o contraseña son inválidos.

            Lo más interesante del entorno de pruebas es comprobar las transacciones realizadas a través de las notificaciones que se realizan dentro de éste. En la sección Sandbox notifications de la pestaña Dashboard se pueden comprobar las notificaciones que recibiría un usuario a través de email o SMS si estuviera fuera del entorno de pruebas. Desde esta sección se puede verificar que las transacciones que se han realizado de prueba desde la aplicación desarrollada se han completado correctamente y con éxito.

Imagen

            A la vez que se comprueban las notificaciones, desde la sección Sandbox Accounts comentada anteriormente se puede comprobar el balance de la cuenta ficticia y verificar si ha aumentado o disminuido este balance dependiendo de la transacción realizada. Nótese que no se refleja la comisión cobrada por Paypal a la persona que recibe el pago en el balance de la cuenta ni en las notificaciones.

            Adicionalmente, si se dispone de un servidor que recibe notificaciones IPN de Paypal también puede ser probado a través de la sandbox de Paypal para comprobar que recibe y procesa correctamente notificaciones de Paypal.