Je commence un nouveau projet et j'essaie très fort d'utiliser TDD pour piloter la conception. Je pousse depuis des années et j'ai finalement obtenu l'autorisation de consacrer plus de temps à ce projet pour l'utiliser pendant que j'apprends à le faire correctement.
Il s'agit d'un nouveau module, à relier à un système existant. Actuellement, tous les accès aux données se font par le biais de services Web, qui pour la plupart ne sont qu'une mince enveloppe sur les procédures stockées de la base de données.
Une exigence est que pour un magasin donné, je retourne tous les bons de commande considérés comme valides pour cette application. Un bon de commande est considéré comme valide si sa date d'expédition tombe avec une plage donnée à partir de la date d'ouverture des magasins (c'est pour les nouveaux magasins).
Maintenant, je ne peux pas mettre cette logique dans le code de l'application, car je ne vais pas ramener un million de bons de commande juste pour que la douzaine qui s'applique puisse s'appliquer à ce magasin compte tenu de la contrainte ci-dessus.
Je pensais, je pouvais passer la plage de dates à un proc GetValidPOs, et lui faire utiliser ces valeurs pour retourner les bons de commande valides. Mais que se passe-t-il si nous ajoutons une autre exigence à ce qui est considéré comme un bon de commande valide?
Et comment puis-je tester cela et vérifier qu'il fonctionne toujours? Nous n'utilisons pas d'ORM, et il est peu probable que cela se produise. Et je ne peux pas appeler la DB dans mon test.
Je suis coincé.
Mon autre pensée, est d'avoir des simulations qui retournent des données valides, d'autres qui retournent des données incorrectes, et que le référentiel local lève une exception si de mauvaises données se produisent, et teste que l'exception est levée si des données invalides sont renvoyées par GetValidPOs proc (ou la maquette utilisée dans les tests).
Est-ce que ça a du sens? Ou existe-t-il une meilleure façon?
MISE À JOUR: Je suis capable d'utiliser EF semble-t-il. Il me suffit maintenant de comprendre comment l'utiliser et de le rendre testable, tout en étant capable de s'appuyer sur des procédures stockées et la difficulté d'avoir des données dispersées sur plusieurs bases de données.