Estoy comenzando un nuevo proyecto y estoy intentando utilizar TDD para impulsar el diseño. He estado presionando durante años, y finalmente obtuve la aprobación para dedicar más tiempo a este proyecto para usarlo mientras aprendo cómo hacerlo correctamente.
Este es un nuevo módulo, para vincularlo a un sistema existente. En la actualidad, todo el acceso a los datos se realiza a través de servicios web, que en su mayor parte son solo una envoltura delgada sobre los procedimientos almacenados de la base de datos.
Un requisito es que para una tienda determinada, devuelvo todas las órdenes de compra que se consideran válidas para esta aplicación. Una orden de compra se considera válida si su fecha de envío cae dentro de un rango determinado desde la fecha de apertura de las tiendas (esto es para nuevas tiendas).
Ahora, no puedo poner esta lógica en el código de la aplicación, ya que no voy a recuperar un millón de pedidos de compra solo para obtener la docena que se aplica a esta tienda dada la restricción anterior.
Estaba pensando, podría pasar el rango de fechas a un proceso GetValidPOs y hacer que use esos valores para devolver los PO válidos. Pero, ¿qué pasa si agregamos otro requisito a lo que se considera una orden de compra válida?
¿Y cómo pruebo esto y verifico que sigue funcionando? No estamos utilizando un ORM, y es poco probable que suceda. Y no puedo llamar al DB en mi prueba.
Estoy atascado.
Mi otro pensamiento es tener algunos simulacros que devuelven datos válidos, otros que devuelven algunos datos incorrectos y hacer que el repositorio local arroje una excepción si se producen datos incorrectos y compruebe que la excepción se genera si el proceso GetValidPOs devuelve datos no válidos (o el simulacro utilizado en las pruebas).
¿Esto tiene sentido? ¿O hay un mejor camino?
ACTUALIZACIÓN: Parece que puedo usar EF. Ahora solo necesito descubrir cómo usarlo y hacerlo comprobable, al mismo tiempo que puedo confiar en los procedimientos almacenados y la dificultad de tener datos dispersos en varias bases de datos.