A microservice to share expenses between friends WIP. Class project for the infrastructure subject
Como lenguaje de programación para el proyecto se ha elegido Rust. El motivo para su elección es que es un lenguaje robusto y versátil. Cuenta con un sistema fuerte de tipos y incentiva una nueva manera de desarrollar software, concentrándose sobre todo en evitar fallos de memoria. Además tiene la eficiencia como objetivo principal.
Como gestor de tareas se ha decidido usar make
. Rust se acompaña normalmente
de la herramienta cargo
para manejar ciertos aspectos de un proyecto, ya que
incorpora ordenes como cargo test
para ejecutar tests o cargo build
para
construir un proyecto. El problema con cargo
es que crear reglas es una
tarea complicada y que incluye mucha lógica, incluso usando complementos que
intentan solucionar esto. Por este motivo he decidido que usar make
y crear
reglas en un makefile
es la mejor solución.
Para realizar los tests he optado por utilizar la utilidad de tests integrada en
cargo. Esta herramienta provee de utilidades para realizar tests unitarios
en Rust
.
Los motivos por los que he optado por usar esta herramienta son:
Cargo
por lo que no se necesitan instalar dependencias
adicionales.Además para hacer uso de fixtures
de forma cómoda he decidido usar
rstest que funciona como un plugin
sobre los tests de Cargo
y permite el uso de los mismos de forma cómoda.
En su momento se consideraron otras alternativas como
speculate.rs que mantiene un
estilo similar a RSpec
. No me he decidido por esta librearía que parece ser
una de las que más apoyo tiene dentro de la comunidad porque añade dependencias
que hay que compilar y no considero que me aporta nada adicional frente a
utilizar el modulo de testing
de cargo
. Además cargo
se actualiza
frecuentemente junto a Rust
y es una herramienta más probada.
Un último argumento aunque no de peso para elegir cargo
a la hora de hacer
tests
es que se utiliza en multitud de proyectos y es el ejecutor de tests
elegido por mozilla en la inmensa mayoría de sus proyectos.