Testando um código legado [fechado]
-
13-11-2019 - |
Pergunta
Estou fazendo um curso de práticas ágeis e tenho lição de casa.O que me ensinaram é que antes de alterar o código (refatorar ou adicionar funcionalidades) devo adicionar alguns testes, para ganhar confiança e ter certeza de que não mudarei o comportamento durante a refatoração.Isso é claro e faz sentido, mas e se o código não puder ser testado sem antes fazer alguma refatoração?
Exemplo simples:
public class Summation
{
private int addend1;
private int addend2;
public Summation(int addend1, int addend2)
{
this.addend1 = addend1;
this.addend2 = addend2;
}
public int doSum()
{
System.out.println(addend1 + addend2);
}
// Getters/setters
}
Gostaria de realizar um teste de aceitação/integração usando FIT e verificar se a tabela a seguir foi verificada:
----------------------------
| addend1 | addend2 | result |
----------------------------
| 1 | 1 | 2 |
----------------------------
| 1 | -1 | 0 |
----------------------------
| -1 | 1 | 0 |
----------------------------
| -1 | -1 | -2 |
----------------------------
Mas, porque a função doSum()
imprime a soma no fluxo de saída padrão, é difícil escrever um teste para ela (prefiro evitar interceptar a saída padrão).Faria mais sentido refatorar ligeiramente o código para ter um método que retornasse a soma.Mas como tecnicamente "não tenho permissão" para alterar o código antes de escrever qualquer teste, isso não é recomendado.
Você pode me dar alguma dica?Como você procederia?
Obrigado!
Solução
Parece semelhante a essa questão.
Independentemente de você ter ou não permissão para alterar o código, você é forçado a interceptar o fluxo de saída padrão.Em qualquer caso, faz parte do comportamento.
Outras dicas
Você pode escrever um arquivo test.cpp para chamar Summation.Summation(x,y) com vários valores para x e y em sua tabela e verificar/registrar os resultados.Certifique-se de que os resultados sejam os esperados.Em seguida, você pode editar a classe Summation e executar seus testes novamente (em test.cpp) para garantir que os valores sejam os mesmos que eram inicialmente.