nabulke
nabulke

Reputation: 11255

Why does this test method fail?

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

Answers (5)

Bl1c
Bl1c

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

fermendezmx
fermendezmx

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

Jackson Pope
Jackson Pope

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

Morvader
Morvader

Reputation: 2313

I think that this is what your are looking for:

Assert.IsTrue(expected.SequenceEqual(actual));

Check this question

Upvotes: 5

Darin Dimitrov
Darin Dimitrov

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

Related Questions