It appears that CollectionAssert
cannot be used with generics. This is super frustrating; the code I want to test does use generics. What am I to do? Write boilerplate to convert between the two? Manually check collection equivalence?
This fails:
ICollection<IDictionary<string, string>> expected = // ...
IEnumerable<IDictionary<string, string>> actual = // ...
// error 1 and 2 here
CollectionAssert.AreEqual(expected.GetEnumerator().ToList(), actual.ToList());
// error 3 here
Assert.IsTrue(expected.GetEnumerator().SequenceEquals(actual));
Compiler errors:
Error 1
'System.Collections.Generic.IEnumerator<System.Collections.Generic.IDictionary<string,string>>' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'System.Collections.Generic.IEnumerator<System.Collections.Generic.IDictionary<string,string>>' could be found
Error 2
'System.Collections.Generic.IEnumerator<System.Collections.Generic.IDictionary<string,string>>' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'System.Collections.Generic.IEnumerator<System.Collections.Generic.IDictionary<string,string>>' could be found
Error 3
'System.Collections.Generic.IEnumerator<System.Collections.Generic.IDictionary<string,string>>' does not contain a definition for 'SequenceEquals' and no extension method 'SequenceEquals' accepting a first argument of type 'System.Collections.Generic.IEnumerator<System.Collections.Generic.IDictionary<string,string>>' could be found
What am I doing wrong? Am I not using extensions correctly?
UPDATE: Ok, this looks a bit better, but still doesn't work:
IEnumerable<IDictionary<string, string>> expected = // ...
IEnumerable<IDictionary<string, string>> actual = // ...
CollectionAssert.AreEquivalent(expected.ToList(), actual.ToList()); // fails
CollectionAssert.IsSubsetOf(expected.ToList(), actual.ToList()); // fails
I don't want to be comparing lists; I only care about set membership equality. The order of the members is unimportant. How can I get around this?