主要なコードの変更(POJOの新しいセット、主要なアプリケーションのリファクタリングなど)が発生した場合、単体テストは修正されるのではなくコメントアウトされる傾向があります。
私は常にリファクタリングと機能の変更を別々にしようとしています。両方を行う必要がある場合、通常は最初にリファクタリングをコミットします。
機能を変更せずにコードをリファクタリングする場合、既存の単体テストは、リファクタリングが機能を誤って壊さないことを保証するのに役立つと考えられています。そのため、このようなコミットでは、単体テストを無効にするか削除することを重要な警告サインと見なします。コードをレビューしているときは、開発者にそうしないように指示する必要があります。
機能を変更しない変更でも、ユニットテストの欠陥のためにユニットテストが失敗する可能性があります。変更するコードを理解していれば、そのような単体テストの失敗の原因は通常すぐに明らかになり、修正が容易です。
たとえば、関数が3つの引数を取る場合、関数の最初の2つの引数間の相互作用をカバーする単体テストは、3番目の引数に有効な値を提供することに注意しなかったかもしれません。単体テストのこの欠陥は、テストされたコードのリファクタリングによって明らかになる可能性がありますが、コードが何をすべきか、単体テストが何をテストしているかを理解していれば簡単に修正できます。
既存の機能を変更する場合、通常はいくつかの単体テストも変更する必要があります。この場合、単体テストは、コードが意図したとおりに機能を変更し、意図しない副作用がないことを確認するのに役立ちます。
バグを修正したり、新しい機能を追加する場合、通常は単体テストを追加する必要があります。それらの場合は、最初に単体テストをコミットし、後でバグ修正または新しい機能をコミットすると役立ちます。これにより、新しいユニットテストが古いコードではパスしなかったが、新しいコードではパスしたことを確認しやすくなります。ただし、このアプローチには完全に欠点がないわけではないため、新しい単体テストとコード更新の両方を同時にコミットすることを支持する議論も存在します。
ユースケースをカバーする統合テストにより多くの時間を費やすことができます。これにより、より小さなスコープのテストの重要性が低くなります。
これにはいくつかの真実の要素があります。ソフトウェアスタックの上位層を対象とするテストでソフトウェアスタックの下位層をカバーできる場合、コードをリファクタリングする際にテストがより役立つ場合があります。
ただし、単体テストと統合テストの正確な区別については同意しないと思います。そして、ある開発者が単体テストと呼び、別の開発者が統合テストと呼ぶテストケースがあれば、それが有用なテストケースであることに同意できる限り心配しません。