Ich möchte wissen, ob eine der Klassen in der .NET-Framework, die IEnumerable implementieren die ICollection-Schnittstelle nicht implementiert.konkrete Implementation von IEnumerable <T> das ist nicht ICollection <T>
Ich frage, weil ich nicht zu 100% Codeabdeckung in der folgenden Erweiterung Methode, die ich geschrieben bekommen:
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();
}
Die letzte Zeile ist nicht in jedem meiner Tests abgedeckt und ich kann‘ Ich finde die richtige Klasse, um sie zu instanziieren.
mein Testcode ist:
[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());
}
Ist das nicht schon "Enumerable.Count()"? –
@PanagiotisKanavos: Nein, denn wenn das Argument für "Enumerable.Count" null ist, wird eine Ausnahme ausgelöst. –
@JonSkeet dann ist nur der Null-Check notwendig. Der Rest des Codes kann entfernt werden. Der Komponententest müsste nur auf korrekte Nullbehandlung überprüfen –