Reputation: 11255
Here's my test function (c#, visual studio 2010):
[TestMethod()]
public void TestGetRelevantWeeks()
{
List<sbyte> expected = new List<sbyte>() { 2, 1, 52, 51, 50, 49, 48, 47, 46, 45 };
List<sbyte> actual = new List<sbyte>() { 2, 1, 52, 51, 50, 49, 48, 47, 46, 45 };
Assert.AreEqual<List<sbyte>>(expected, actual);
}
Exception:
Failed TestGetRelevantWeek Assert.AreEqual failed.
Expected:System.Collections.Generic.List 1[System.SByte].
Actual:System.Collections.Generic.List 1[System.SByte].
Does AreEqual only check equality of the reference, not the contents?
But then, the exception message would be confusing. I also couldn't find a documentation of the default equality comparer for a generic list.
Could you help to clarify why the test fails and what would be solutions for testing the equality of the contents of both lists?
Kind regards
Upvotes: 10
Views: 5888
Reputation: 1
CollectionAssert.AreEqual(expected, actual);
Assert.IsTrue(expected.SequenceEqual(actual));
Assert.IsTrue(expected.SequenceEqual(actual));
These options don't work for me.
Probably the only viable option. Had to use this:
for (var i = 0; i < expected.Count; i++)
{
Assert.AreEqual(expected[i], actual[i]);
}
Upvotes: 0
Reputation: 21
You can also use CollectionAssert
instead of Assert
:
CollectionAssert.AreEqual(expected, actual);
I think it is much more simple and fancier than a loop over the collection of your test cases.
Upvotes: 2
Reputation: 14640
The Assert.AreEqual()
method does a reference equality test as you expected.
Assuming you're using .Net 3.5 or above, you can do this:
using System.Linq;
Assert.IsTrue(expected.SequenceEqual(actual));
Edit: Clarified when this option is available.
Upvotes: 20
Reputation: 2313
I think that this is what your are looking for:
Assert.IsTrue(expected.SequenceEqual(actual));
Check this question
Upvotes: 5
Reputation: 1038710
Does AreEqual only check equality of the reference, not the contents?
Yeap.
To test the contents you could:
Assert.AreEqual(expected.Count, actual.Count);
for (var i = 0; i < expected.Count; i++)
{
Assert.AreEqual(expected[i], actual[i]);
}
Upvotes: 13