Atualmente, estou refatorando um método importante em um sistema legado. Houve quase zero teste até eu começar a trabalhar nele, e adicionei bastante para garantir o trabalho correto após minhas refatorações.
Agora me deparei com a parte mais crucial: o algoritmo que calcula um indicador. É algo como
indicator = (OneNumberFromA + AnotherNumberFromB) / elapsedTime;
Como posso testar o comportamento correto para esta função com testes de unidade?
Existem também alguns algoritmos ligeiramente diferentes nas funções, que o programa alcança em alguns casos - mas em todos eles, elapsedTime
é vital para o resultado.
System.currentTimeMillis()
por um métodoTime.now()
, que geralmente faz o mesmo, mas em teste pode ser feito para retornar qualquer valor que você desejar. Isso pode exigir algum esforço, mas não é provável que quebre nada, pois é uma mudança muito focada e contida.A medição do tempo e a avaliação do indicador devem estar em diferentes funções. No seu caso,
elapsedTime
deve ser uma entrada da função de avaliação. Dessa forma, seu código de avaliação pode ser testado e é mais fácil de entender.Agora você ainda tem o problema de testar a função de medição de tempo, mas isso está além do escopo desta pergunta.
fonte