IEnumerableを実装している.netフレームワークのクラスがICollectionインターフェイスを実装していないかどうかを知りたいと思います。具体的なIEnumerable <T>の実装はICollectionではありません<T>
私は私が書いた次の拡張方法で100%のコードカバレッジを得ることができないので、私はそれを聞いてるのよ。「
public static int GetSafeCount<T>(this IEnumerable<T> nullableCollaction)
{
if (nullableCollaction == null)
{
return 0;
}
var collection = nullableCollaction as ICollection<T>;
if (collection != null)
{
return collection.Count;
}
return nullableCollaction.Count();
}
最後の行は、私のテストのいずれにも覆われていないと私ができますそれをカバーするためにインスタンス化する正しいクラスを見つける。
私のテストコードは次のとおりです。
[Test]
public void GetSafeCount_NullObject_Return0()
{
IEnumerable<string> enumerable=null;
Assert.AreEqual(0, enumerable.GetSafeCount());
}
[Test]
public void GetSafeCount_NonICollectionObject_ReturnCount()
{
IEnumerable<string> enumerable = new string[]{};
Assert.AreEqual(0, enumerable.GetSafeCount());
}
「Enumerable.Count()」はすでに何をしていますか? –
@PanagiotisKanavos:いいえ、Enumerable.Countの引数がnullの場合、例外がスローされるためです。 –
@ JonSkeetでは、ヌルチェックのみが必要です。残りのコードは削除することができます。ユニットテストでは正しいnull処理を確認するだけで済みます。 –