Isso responde por que você deveria fazer testes de unidade.
Os três vídeos abaixo abordam o teste de unidade em javascript, mas os princípios gerais se aplicam à maioria dos idiomas.
Teste de unidade: minutos agora economizarão horas depois - Eric Mann - https://www.youtube.com/watch?v=_UmmaPe8Bzc
Teste de unidade JS (muito bom) - https://www.youtube.com/watch?v=-IYqgx8JxlU
Escrevendo JavaScript testável - https://www.youtube.com/watch?v=OzjogCFO4Zo
Agora, estou apenas aprendendo sobre o assunto, para que eu não esteja 100% correto e não exista mais do que o que estou descrevendo aqui, mas meu entendimento básico do teste de unidade é que você escreve algum código de teste (que é mantido separado do seu código principal) que chama uma função em seu código principal com entrada (argumentos) que a função exige e o código verifica se recupera um valor de retorno válido. Se ele receber um valor válido, a estrutura de teste de unidade que você está usando para executar os testes exibirá uma luz verde (tudo de bom) se o valor for inválido, você receberá uma luz vermelha e poderá resolver o problema imediatamente antes de libere o novo código para produção, sem testar, talvez você não tenha capturado o erro.
Então, você escreve testes para o seu código atual e cria o código para que ele passe no teste. Meses depois, você ou outra pessoa precisa modificar a função em seu código principal, porque, anteriormente, você já havia escrito o código de teste para essa função, agora executa novamente e o teste pode falhar porque o codificador introduziu um erro lógico na função ou retorna algo completamente diferente do que essa função deve retornar. Novamente, sem o teste, esse erro pode ser difícil de rastrear, pois também pode afetar outros códigos e passará despercebido.
Além disso, o fato de você ter um programa de computador que executa seu código e o testa, em vez de fazê-lo manualmente na página por página do navegador, economiza tempo (teste de unidade para javascript). Digamos que você modifique uma função usada por algum script em uma página da Web e ela funcione muito bem para o novo objetivo pretendido. Mas, digamos também por razões de argumentos que há outra função que você tem em outro lugar no seu código que depende dessa função recém-modificada para que ela funcione corretamente. Agora, essa função dependente pode parar de funcionar devido às alterações feitas na primeira função; no entanto, sem os testes executados automaticamente pelo seu computador, você não notará que há um problema com essa função até que seja executada e executada. vocês'
Para reiterar, ter testes executados durante o desenvolvimento de seu aplicativo detectará esses tipos de problemas durante a codificação. Não tendo os testes instalados, você teria que passar manualmente por todo o aplicativo e, mesmo assim, pode ser difícil identificar o bug, ingenuamente você o envia para produção e depois de um tempo um usuário gentil envia um relatório de bug (que não será tão bom quanto suas mensagens de erro em uma estrutura de teste).
É bastante confuso quando você ouve o assunto pela primeira vez e pensa: não estou testando meu código? E o código que você escreveu está funcionando como deveria: "Por que preciso de outra estrutura?" ... Sim, você já está testando seu código, mas um computador é melhor nisso. Você só precisa escrever testes suficientemente bons para uma função / unidade de código uma vez e o resto é resolvido pelo poderoso cpu, em vez de ter que verificar manualmente se todo o seu código ainda está funcionando quando você faz uma alteração no código. seu código.
Além disso, você não precisa testar seu código de unidade, se não quiser, mas vale a pena à medida que o projeto / base de código começa a crescer à medida que as chances de introduzir bugs aumentam.