Estou iniciando um novo projeto e tentando muito com muito esforço usar o TDD para conduzir o design. Estou pressionando há anos e finalmente obtive aprovação para dedicar mais tempo a esse projeto para usá-lo enquanto aprendo como fazê-lo corretamente.
Este é um novo módulo, vinculado a um sistema existente. Atualmente, todo o acesso a dados acontece por meio de serviços da web, que na maioria das vezes são apenas um invólucro fino sobre os procedimentos armazenados no banco de dados.
Um requisito é que, para uma determinada loja, eu retorne todos os pedidos considerados válidos para este aplicativo. Um pedido de compra é considerado válido se a data de envio cair dentro de um determinado intervalo a partir da data de abertura das lojas (isto é para novas lojas).
Agora, não posso colocar essa lógica no código do aplicativo, pois não vou trazer de volta um milhão de POs apenas para que a dúzia que se aplica possa se aplicar a esse armazenamento, devido à restrição acima.
Eu estava pensando em poder passar o período para um processo GetValidPOs e fazer com que eles usem esses valores para retornar os POs válidos. Mas, e se adicionarmos outro requisito ao que é considerado um pedido válido?
E como faço para testar isso e verificar se continua funcionando? Não estamos usando um ORM, e é improvável que isso aconteça. E não posso ligar para o banco de dados no meu teste.
Estou preso.
Meu outro pensamento, é ter algumas simulações que retornam dados válidos, outras que retornam alguns dados inválidos e o repositório local lança uma exceção se ocorrerem dados incorretos e testa se a exceção é lançada se dados inválidos forem retornados pelo processo GetValidPOs (ou a simulação usada nos testes).
Isso faz sentido? Ou há um jeito melhor?
ATUALIZAÇÃO: Eu sou capaz de usar EF parece. Agora só preciso descobrir como usá-lo e torná-lo testável, enquanto ainda posso confiar nos procedimentos armazenados e na dificuldade de ter dados espalhados por vários bancos de dados.