Depois de mais alguns anos de codificação e trabalho em projetos, fornecerei uma resposta para minha própria pergunta.
Sim, você deve escrever testes de unidade. Os testes de ponta a ponta são mais difíceis de escrever e quebradiços, especialmente se eles dependem dos componentes da interface do usuário.
Se você estiver usando uma estrutura como Django ou Rails (ou suas próprias classes personalizadas), deverá ter uma classe de formulário que manipulará a validação do formulário. Você também terá classes de exibição que exibem modelos renderizados e o formulário e lidam com solicitações GET e POST.
Em um teste completo, você:
- pegue o url
- preencha o formulário com dados válidos
- postar o formulário no URL
- verifique se o banco de dados foi atualizado ou se alguma ação foi executada como resultado do formulário válido
Você está testando muito código e sua cobertura será muito boa, mas você só está testando o caminho feliz quando tudo der certo. Como você garante que o formulário tenha a validação correta? E se esse formulário for usado em várias páginas? Você escreve mais um teste de ponta a ponta?
Vamos tentar novamente com testes de unidade:
- teste o método view GET
- teste o método view POST com um formulário falso / simulado
- teste o formulário com dados válidos
- teste o formulário com dados inválidos
- testar os efeitos colaterais do formulário
Usando testes de unidade, você está testando pedaços menores de código e os testes são específicos e fáceis de escrever. Quando você combina isso com o TDD (Test Driven Development), obtém um código de qualidade superior.
A facilidade de escrever testes de unidade não deve ser descartada, porque quando você está em um projeto que não possui testes automatizados, precisa começar de algum lugar. Começar com testes de unidade é mais fácil e rápido e permite iniciar imediatamente o teste de bugs, e não apenas do caminho feliz.
was told by a co-worker that the reason for this is that we can rip out and change the underlying implementation at any point as long as the end-to-end tests pass.
- Isso também vale para testes de unidade. Parece-me que os testes de ponta a ponta estão sendo usados como desculpa para não escrever testes de unidade.