Estou refatorando uma enorme classe de código legado. A refatoração (presumo) defende isso:
- escreva testes para a classe herdada
- refatorar o pedaço fora da classe
Problema: depois que refatorar a classe, meus testes na etapa 1 precisarão ser alterados. Por exemplo, o que antes era um método legado, agora pode ser uma classe separada. O que era um método agora pode ser de vários métodos. Todo o cenário da classe herdada pode ser destruído em algo novo e, portanto, os testes que escrevo na etapa 1 serão quase nulos. Em essência, adicionarei a Etapa 3. reescrever profusamente meus testes
Qual é o objetivo então escrever testes antes de refatorar? Parece mais um exercício acadêmico de criar mais trabalho para mim. Estou escrevendo testes para o método agora e estou aprendendo mais sobre como testar as coisas e como o método legado funciona. Pode-se aprender isso apenas lendo o próprio código legado, mas escrever testes é quase como esfregar meu nariz nele e também documentar esse conhecimento temporário em testes separados. Portanto, dessa maneira, quase não tenho escolha a não ser aprender o que o código está fazendo. Eu disse temporariamente aqui, porque refatorarei o código e toda a minha documentação e testes serão nulos e sem efeito por uma parte significativa, exceto que meu conhecimento permanecerá e permitirá que eu seja mais atualizado na refatoração.
Essa é a verdadeira razão para escrever testes antes de refatorar - para me ajudar a entender melhor o código? Tem que haver outra razão!
Por favor explique!
Nota:
Existe este post: faz sentido escrever testes para código legado quando não há tempo para uma refatoração completa? mas diz "escrever testes antes do refator", mas não diz "por que" ou o que fazer se "escrever testes" parecer "trabalho ocupado que será destruído em breve"