最近、ユニットテストについて同僚と興味深い議論をしました。契約が変更されたときに、単体テストの保守の生産性が低下したときについて話し合っていました。
おそらく、誰でもこの問題に取り組む方法を教えてくれるでしょう。詳しく説明しましょう:
ですから、気の利いた計算を行うクラスがあるとしましょう。コントラクトは、数値を計算する必要があると述べています。または、何らかの理由で失敗した場合は -1 を返します。
私はそれをテストする契約テストを持っています。そして、他のすべてのテストでは、この気の利いた電卓をスタブします。
したがって、契約を変更すると、計算できないときはいつでも CannotCalculateException がスローされます。
私の契約テストは失敗するので、それに応じて修正します。ただし、モック/スタブ化されたすべてのオブジェクトは、古いコントラクト ルールを引き続き使用します。これらのテストは成功しますが、成功するはずはありません!
ここで問題になるのは、単体テストに対するこの信頼を基に、そのような変更をどれだけ信頼できるかということです... 単体テストは成功しますが、アプリケーションのテスト中にバグが発生します。この計算機を使用するテストは修正する必要があります。これには時間がかかり、何度もスタブ/モックされることさえあります...
このケースについてどう思いますか?私はそれについて深く考えたことはありませんでした。私の意見では、単体テストに対するこれらの変更は受け入れられるでしょう。単体テストを使用しないと、テスト段階で (テスターによって) そのようなバグが発生することもわかります。しかし、何がより多くの時間 (またはより短い時間) を要するかを指摘できるほど自信がありません。
何かご意見は?