あなたは 2 つの異なることの長所と短所を尋ねています (馬に乗ることとオートバイに乗ることの長所と短所は何ですか?)
もちろん、どちらも「自動テスト」(~riding) ですが、代替手段であるという意味ではありません (何百マイルも馬に乗らず、泥だらけの車に閉じこもったバイクに乗らないでください)。場所)
単体テストは、コードの最小単位 (通常はメソッド) をテストします。各単体テストは、それがテストしているメソッドと密接に結びついており、適切に記述されていれば、それとのみ (ほぼ) 結びついています。
これらは、新しいコードの設計と既存のコードのリファクタリングをガイドするのに最適です。システムが統合テストの準備が整うずっと前に、問題を発見するのに最適です。私がガイドを書いたことに注意してください。すべてのテスト駆動開発はこの言葉に関するものです。
単体テストを手動で行うのは意味がありません。
あなたの主な関心事と思われるリファクタリングについてはどうですか? メソッドの実装 (コンテンツ) のみをリファクタリングし、その存在や「外部動作」をリファクタリングしない場合でも、単体テストは有効であり、信じられないほど便利です (実際に試してみるまで、どれだけ役立つかは想像できません)。
より積極的にリファクタリングし、メソッドの存在や動作を変更する場合は、新しいメソッドごとに新しい単体テストを作成し、古いメソッドを破棄する必要があります。しかし、特にコード自体の前にユニット テストを記述すると、実装の詳細 (つまり、メソッドがどのようにすべきか) に惑わされることなく、設計 (つまり、メソッドが何をすべきか、何をすべきでないか) を明確にするのに役立ちます。やるべきことをやる)。
自動化された統合テストは、コードの最大単位、通常はアプリケーション全体をテストします。
手動でテストしたくないユースケースをテストするのに最適です。ただし、手動の統合テストを使用することもできますが、それらは効果的です (利便性は劣りますが)。
今日新しいプロジェクトを開始する場合、単体テストがないことは意味がありませんが、あなたのような既存のプロジェクトの場合、既に持っていて機能しているすべてのものに対して単体テストを作成することはあまり意味がありません。
あなたの場合、私はむしろ「中間」アプローチを使用したいと思います:
- リファクタリングするセクションのみをテストする小規模な統合テスト。全体をリファクタリングする場合は、現在の統合テストを使用できますが、たとえば XML 生成のみをリファクタリングする場合は、データベースの存在を要求しても意味がありません。シンプルで小さな XML 統合テスト。
- これから作成する新しいコードの単体テストの束。すでに上で書いたように、ユニットテストは、「その間に何かをいじる」とすぐに準備が整い、「混乱」がどこかに行くことを確認します。
実際、統合テストは、「混乱」が機能していないことを確認するだけです (最初は機能しないからですよね?)。
- なぜ機能しないのか
- 「混乱」のデバッグが本当に何かを修正している場合
- 「混乱」のデバッグが他の何かを壊している場合
統合テストは、変更全体が成功した場合にのみ、最後に確認を行います (そして、答えは長い間「いいえ」になります)。統合テストは、リファクタリング自体の間は何の助けにもなりません。そのためには単体テストが必要です。