Jak mogę utworzyć testy jednostkowe obejmujące kolekcje w c #?

Mam kilka metod w C #, które zwracają różne kolekcje, które chcę przetestować. Chciałbym użyć jak najmniej testowych API - wydajność nie jest ważna. Typowym przykładem jest:

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));
}

Muszę napisać pewną liczbę podpisów w zależności od tego, czy kolekcje są tablicami, listami, kolekcjami itp. Czy istnieją transformacje, które to upraszczają (np. Do konwersji tablicy na zestaw?).

Muszę to zrobić również dla moich klas. Zaimplementowałem dla nich HashCode i Equals. Są one (głównie) podklasowe z (powiedzmy) MySuperClass. Czy możliwe jest wdrożenie funkcjonalności:

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

takie, które mogę zadzwonić:

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

zamiast pisać to dla każdej klasy

questionAnswers(3)

yourAnswerToTheQuestion