Como posso criar testes unitários envolvendo coleções em c #?

Eu tenho um número de métodos em C # que retornam várias coleções que desejo testar. Eu gostaria de usar o mínimo possível de APIs de teste - o desempenho não é importante. Um exemplo típico é:

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

Eu estou tendo que escrever um número de assinaturas de acordo com se as coleções são matrizes, listas, ICollections, etc. Existem transformações que simplificam isso (por exemplo, para converter uma matriz para um conjunto?).

Eu também preciso fazer isso para minhas próprias aulas. Eu implementei HashCode e Equals para eles. Eles são (principalmente) subclassificados de (digamos) MySuperClass. É possível implementar a funcionalidade:

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

de tal forma que eu possa ligar:

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

ao invés de escrever isso para todas as classes

questionAnswers(3)

yourAnswerToTheQuestion