Uma coisa é dizer que é recomendável o uso de testes depois da refatoração. Outra coisa é dizer que é obrigatório. Já refatorei dezenas de códigos sem fazer testes automatizados. E nem por isso a refatoração não foi válida, muito pelo contrário.
Agora, ao meu ver, não precisa utilizar fortemente conceitos de orientação a objeto. E se refatorarmos um código escrito em C ou JavaScript? Ou qualquer outra linguagem estruturada?