テスト カバレッジがほぼ 100% のアセンブリが多数ありますが、以下の例のような状況に陥ることがよくあります。デフォルトの switch ケースをテストすることはできません。これは、列挙型にさらに項目を追加するが、新しい項目をサポートするために switch ステートメントを更新するのを忘れるという将来のバグを防ぐためにあります。
その「テストできない」コードを削除できるパターンを見つけてテストするか、そのコード行(ただしメソッド全体ではない) をカバレッジ分析から除外するようにマークしたいと考えています。
ばかげているように聞こえるかもしれませんが、デフォルトのケースが決して起こらないと仮定したくありません。また、デフォルトのケースを既存のものとバンドルしたくありません。そのようなバグを作成したときに例外がスローされるようにします。それは遅かれ早かれ起こるでしょう。
現時点では、 DotCoverを使用してカバレッジを計算しています。
注:これは単なるコード例ですが、かなり一般的なパターンを示していると思います。
public class Tester
{
private enum StuffToDo
{
Swim = 0,
Bike,
Run
}
public void DoSomeRandomStuff()
{
var random = new Random();
DoStuff((StuffToDo)random.Next(3));
}
private void DoStuff(StuffToDo stuff)
{
switch (stuff)
{
case StuffToDo.Swim:
break;
case StuffToDo.Bike:
break;
case StuffToDo.Run:
break;
default:
// How do I test or exclude this line from coverage?
throw new ArgumentOutOfRangeException("stuff");
}
}
}