同僚のためにいくつかのコードをレビューしていて、単体テスト クラスで次のようなテストに出くわしました。
// setup
Foo f = ...
FooToBarConverter ftb = ...
Bar b = ftb.Convert(f); // It is easier to create a Bar by converting it from a Foo than making one 'from scratch'
// test
systemUnderTest.DoSomething(bar);
// assert
Assert.IsTrue(...)
DoSomething() メソッドをカバーする唯一のテストであるため、FooToBarConverter とテスト対象のシステムをテストしているため、明らかにこれは統合テストです。このテストを統合テスト ソリューションに移行することを提案しましたが、これにより単体テストのコード カバレッジが低下します。私たちは 100% の単体テスト コード カバレッジを目指しています (もちろん、100% カバレッジは目的そのものではなく、目的を達成するための手段であり、100% カバーされたコードは必ずしも 100% 正しいコードであるとは限りません)。
統合テストを外した場合、カバレッジを元に戻すために単体テストを作成する理由はありますか?
それとも、100% の単体テスト カバレッジで間違ったことを目指しているのでしょうか? すべてのテストを組み合わせて 100% のカバレッジを目指すべきでしょうか (またはまったく 100% を目指すべきでしょうか)。
ありがとうございました。
編集/更新:
これは、テスト対象のシステムを適切に単体テストする方法に関する質問ではありません (これが単体テストではない理由を知っており、それを適切に単体テストに変換する方法も知っています)。 FooToBarConverter. テスト対象システムのコード カバレッジについて意見が欲しい: テスト対象システムの統合テストは十分か? それとも単体テストも必要ですか?