Wie kann ich Komponententests mit Sammlungen in c # erstellen?

Ich habe eine Reihe von Methoden in C #, die verschiedene Sammlungen zurückgeben, die ich testen möchte. Ich möchte so wenig Test-APIs wie möglich verwenden - die Leistung ist nicht wichtig. Ein typisches Beispiel ist:

HashSet<string> actualSet = MyCreateSet();
string[] expectedArray = new string[]{"a", "c", "b"};
MyAssertAreEqual(expectedArray, actualSet);

// ...

void MyAssertAreEqual(string[] expected, HashSet<string> actual)
{
    HashSet<string> expectedSet = new HashSet<string>();
    foreach {string e in expected)
    {
        expectedSet.Add(e);
    }
    Assert.IsTrue(expectedSet.Equals(actualSet));
}

Ich muss eine Reihe von Signaturen schreiben, je nachdem, ob es sich bei den Sammlungen um Arrays, Listen, ICollections usw. handelt. Gibt es Transformationen, die dies vereinfachen (z. B. zum Konvertieren eines Arrays in ein Set?).

Ich muss das auch für meine eigenen Klassen tun. Ich habe HashCode und Equals für sie implementiert. Sie werden (hauptsächlich) von (sagen wir) MySuperClass untergeordnet. Ist es möglich, die Funktionalität zu implementieren:

void MyAssertAreEqual(IEnumerable<MySuperClass> expected, 
                      IEnumerable<MySuperClass> actual); 

so dass ich anrufen kann:

IEnumerable<MyClassA> expected = ...;
IEnumerable<MyClassA> actual = ...; 
MyAssertAreEqual(expected, actual); 

anstatt dies für jede Klasse zu schreiben

Antworten auf die Frage(3)

Ihre Antwort auf die Frage