Como testar Código Web?

votos
11

Alguém tem algumas boas dicas para escrever código de teste para o desenvolvimento de banco de dados back-end, onde há uma enorme dependência do Estado?

Especificamente, eu quero escrever testes para o código que recuperar registros do banco de dados, mas as respostas vão depender dos dados no banco de dados (que podem mudar ao longo do tempo).

Será que as pessoas costumam fazer um sistema de desenvolvimento separado, com um banco de dados 'congelado' para que qualquer função dada sempre deve retornar exatamente o mesmo conjunto de resultados?

Estou bastante certo de que este não é uma questão nova, então eu seria muito interessado em aprender com a experiência de outras pessoas.

Existem bons artigos lá fora, que discutir essa questão do desenvolvimento baseado na web em geral?

Eu costumo escrever código PHP, mas eu esperaria que todas estas questões são em grande parte linguagem e estrutura agnóstico.

Publicado 05/08/2008 em 22:58
fonte usuário
Em outras línguas...                            


10 respostas

votos
5

Você deve olhar para DBUnit, ou tentar encontrar um PHP equivalente (deve haver um lá fora). Você pode usá-lo para preparar o banco de dados com um conjunto específico de dados que representa os dados de teste, e, assim, cada teste deixará de depender do banco de dados e algum estado existente. Desta forma, cada ensaio é auto-contido e não irá quebrar durante ainda mais o uso da base de dados.

Update: Uma busca rápida no Google mostrou uma extensão da unidade DB para PHPUnit.

Respondeu 05/08/2008 em 23:03
fonte usuário

votos
3

Se você é mais preocupado com o teste de camada de dados, você pode querer verificar para fora este livro: Patterns xUnit teste: refatoração de código de teste . Eu estava sempre inseguro sobre isso sozinho, mas este livro faz um grande trabalho para ajudar a enumerar as preocupações como performance, reprodutibilidade, etc.

Respondeu 06/08/2008 em 05:14
fonte usuário

votos
2

Usamos um in-memory database (HSQL: http://hsqldb.org/ ). Hibernate ( http://www.hibernate.org/ ) torna mais fácil para nós para apontar nossos testes de unidade no db testes, com a vantagem adicional de que eles correm rápido como um raio ..

Respondeu 10/09/2008 em 13:02
fonte usuário

votos
2

Eu acho que depende o banco de dados você está usando, mas a Red Gate (www.red-gate.com) fazer uma ferramenta chamada SQL Data Generator. Isso pode ser configurado para encher seu banco de dados com dados de teste que procuram sensatas. Você pode também dizer-lhe para usar sempre a mesma semente em seu gerador de números aleatórios para que seus dados 'aleatória' é o mesmo de cada vez.

Você pode então escrever os testes de unidade para fazer uso destes dados confiável, repetível.

Como para testar o lado web das coisas, eu estou investigando selênio (selenium.openqa.org). Este parece ser um conjunto de testes capazes cross-browser que irá ajudá-lo a funcionalidade de teste. No entanto, como acontece com todas essas ferramentas web site de teste, não há nenhuma maneira real para testar o quão bem essas coisas olhar em todos os navegadores sem lançar um olho humano sobre eles!

Respondeu 06/08/2008 em 14:44
fonte usuário

votos
1

Em geral concordo com Peter, mas para a criação e exclusão de dados de teste eu não iria usar SQL diretamente. Eu prefiro usar alguma API CRUD que é usado no produto para criar dados como semelhante quanto possível da produção ...

Respondeu 10/09/2008 em 12:31
fonte usuário

votos
1

Gostaria de propor a utilização de três bases de dados. Um banco de dados de produção, um banco de desenvolvimento (preenchido com alguns dados significativos para cada desenvolvedor) e um banco de dados de teste (com mesas vazias e talvez algumas linhas que são sempre necessários).

Uma maneira de testar o código do banco de dados é:

  1. Insira algumas linhas (usando SQL) para inicializar o estado
  2. Executar a função que deseja testar
  3. Comparar esperado com resultados reais. Aqui você poderia usar seu quadro normal de teste de unidade
  4. Limpar as linhas que foram alteradas (para que a próxima corrida não vai ver a execução anterior)

A limpeza pode ser feita de uma maneira padrão (claro, apenas na base de dados de teste) com DELETE * FROM table.

Respondeu 19/08/2008 em 19:40
fonte usuário

votos
1

Aqui está a minha estratégia (Eu uso JUnit, mas eu tenho certeza que há uma maneira de fazer o equivalente em PHP):

Eu tenho um método que é executado antes de todos os testes de unidade para uma classe DAO específico. Ela coloca o banco de dados dev em um estado conhecido (adiciona todos os dados de teste, etc.). Como I executar testes, I acompanhar de quaisquer dados adicionados ao estado conhecido. Esta informação é feita no final de cada teste. Após todos os testes para a classe ter executado, outro método remove todos os dados de teste no banco de dados dev, deixando-o no estado em que estava antes de os testes foram executados. É um pouco de trabalho para fazer tudo isso, mas eu costumo escrever os métodos em uma classe DBTestCommon onde todas as minhas classes de teste DAO pode chegar até eles.

Respondeu 11/08/2008 em 14:30
fonte usuário

votos
1

Você poderia tentar http://selenium.openqa.org/ é mais para testes de GUI em vez de um aplicativo de teste de camada de dados, mas não gravar suas ações que então podem ser reproduzidos para automatizar testes em diferentes plataformas.

Respondeu 06/08/2008 em 13:06
fonte usuário

votos
1

Se você pode configurar o banco de dados com uma quantidade conhecida antes de executar os testes e derrubar no final, então você vai saber quais os dados que você está trabalhando.

Então você pode usar algo como Selenium para testar facilmente de seu UI (assumindo web-based aqui, mas há uma série de ferramentas de teste de interface do usuário lá fora, para outros UI-sabores) e detectar a presença de certos registros puxado para trás do banco de dados.

É definitivamente vale a pena a criação de uma versão de teste do banco de dados - ou fazer seus scripts de teste preencher o banco de dados com dados conhecidos, como parte dos testes.

Respondeu 05/08/2008 em 23:08
fonte usuário

votos
1

Eu tenho exatamente o mesmo problema com o meu trabalho e eu acho que a melhor idéia é ter um script PHP para recriar o banco de dados e, em seguida, um script separado onde eu jogue dados loucos para ele para ver se ele quebra.

Não tenho nem nunca usou qualquer teste de unidade ou afins isso não posso dizer se ele funciona ou não arrependido.

Respondeu 05/08/2008 em 23:03
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more