Para desenhar aspectos de algumas respostas juntos e adicionar meu 2p ...
Nota: meus comentários se referem principalmente ao teste do banco de dados , e não ao teste da interface do usuário (embora se aplique obviamente semelhante).
Os bancos de dados precisam tanto de teste quanto os aplicativos de front-end, mas tendem a ser testados com base em 'funciona com o front-end?' ou 'os relatórios produzem o resultado correto?', que na minha opinião está sendo testado muito tarde no processo de desenvolvimento do banco de dados e não é muito robusto.
Temos vários clientes que utilizam testes de unidade / integração / sistema para o banco de dados do data warehouse, além do UAT / performance / et al. testes. Eles descobrem que, com uma integração contínua e testes automatizados, enfrentam muitos problemas antes de chegar ao UAT tradicional, economizando tempo no UAT e aumentando as chances de sucesso do UAT.
Tenho certeza que a maioria concorda que um rigor semelhante deve ser aplicado aos testes de banco de dados e aos testes de front-end ou de relatório.
O principal com o teste é testar pequenas entidades simples, garantindo sua correção, antes de prosseguir para combinações complexas de entidades, garantindo sua correção antes de expandir para o sistema mais amplo.
Então, dando algum contexto à minha resposta ...
Teste de Unidade
- possui um foco de teste para provar que a unidade funciona, por exemplo, uma tabela, exibição, função, procedimento armazenado
- deve 'stub' as interfaces para remover dependências externas
- fornecerá seus próprios dados. Você precisa de um estado inicial conhecido dos dados; portanto, se houver uma chance de os dados existirem antes do teste, truncamentos / exclusões devem ocorrer antes da população
- será executado idealmente em seu próprio contexto de execução
- limpará depois de si próprio e removerá os dados usados; isso é importante apenas quando stubs não são usados.
As vantagens de fazer isso são que você está removendo todas as dependências externas no teste e executando a menor quantidade de testes para provar a correção. Obviamente, esses testes não podem ser executados no banco de dados de produção. Pode ser que haja vários tipos de testes que você fará, dependendo do tipo de unidade, incluindo:
- verificação de esquema, alguns podem chamar isso de teste de 'contrato de dados'
- valores da coluna passando
- o exercício de caminhos lógicos com diferentes valores de dados para funções, procedimentos, visualizações, colunas calculadas
- teste de casos extremos - NULL, dados incorretos, números negativos, valores muito grandes
Teste de Integração (Unidade)
Achei este post do SE útil ao falar sobre vários tipos de teste.
- tem o foco de teste para provar que as unidades se integram
- realizada em várias unidades juntas
- deve 'stub' as interfaces para remover dependências externas
- fornecerá seus próprios dados, para remover os efeitos de influências externas de dados
- será executado idealmente em seu próprio contexto de execução
- irá limpar depois de si e remover os dados criados; isso é importante apenas quando stubs não são usados.
Ao passar de testes de unidade para esses testes de integração, geralmente haverá um pouco mais de dados, para testar uma variedade maior de casos de teste. Obviamente, esses testes não podem ser executados no banco de dados de produção.
Em seguida, ele passa para o Teste do Sistema , Teste de Integração do Sistema (também conhecido como teste de ponta a ponta), com volumes de dados e escopo cada vez maiores. Todos esses testes devem se tornar parte de uma estrutura de teste de regressão. Alguns desses testes podem ser escolhidos pelos usuários para serem executados como parte do UAT, mas UAT são os testes definidos pelos usuários , não como definidos pela TI - um problema comum!
Então agora que eu dei algum contexto, para responder às suas perguntas reais
- dados pré-preenchidos para testes de unidade e integração podem causar erros espúrios e devem ser evitados.
- A única maneira de garantir testes consistentes é não fazer suposições sobre os dados de origem e controlá-los rigorosamente.
- é importante um contexto de execução de teste separado, para garantir que um testador não esteja em conflito com outro testador executando os mesmos testes em uma ramificação diferente do código do banco de dados controlado de origem.