Testes de unidade - O benefício de testes de unidade com alterações de contrato?

Recentemente, tive uma discussão interessante com um colega sobre testes de unidade. Estávamos discutindo quando a manutenção dos testes de unidade se tornou menos produtiva quando seus contratos mudam.

Talvez alguém possa me esclarecer como abordar esse problema. Deixe-me elaborar:

Então, digamos que há uma classe que faz alguns cálculos bacanas. O contrato diz que ele deve calcular um número ou retorna -1 quando falha por algum motivo.

Eu tenho testes de contrato que testam isso. E em todos os meus outros testes, eu apaguei essa calculadora bacana.

Então agora eu altero o contrato, sempre que ele não puder calcular, ele lançará uma CannotCalculateException.

Meus testes de contrato falharão e eu os corrigirei de acordo. Mas todos os meus objetos zombados / stubbed ainda usarão as regras antigas do contrato. Esses testes serão bem-sucedidos, enquanto não deveriam!

A questão que se coloca é que, com essa fé no teste de unidade, quanta fé pode ser depositada nessas mudanças ... Os testes de unidade são bem-sucedidos, mas ocorrerão erros ao testar o aplicativo. Os testes usando esta calculadora precisarão ser corrigidos, o que custa tempo e pode até ser repetido / ridicularizado muitas vezes ...

Como você pensa sobre este caso? Eu nunca pensei sobre isso. Na minha opinião, essas alterações nos testes de unidade seriam aceitáveis. Se eu não usar testes de unidade, também verificaria esses erros na fase de teste (pelos testadores). No entanto, não tenho confiança suficiente para apontar o que custará mais tempo (ou menos).

Alguma ideia?

questionAnswers(9)

yourAnswerToTheQuestion