xUnit : Assert two List are equal?

前端 未结 4 1980
长发绾君心
长发绾君心 2020-12-05 01:33

I\'m new to TDD and xUnit so I want to test my method that looks something like:

List DeleteElements(this List a, List b         


        
相关标签:
4条回答
  • 2020-12-05 02:05

    xUnit.Net recognizes collections so you just need to do

    Assert.Equal(expected, actual); // Order is important
    

    You can see other available collection assertions in CollectionAsserts.cs

    For NUnit library collection comparison methods are

    CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters
    

    and

    CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter
    

    More details here: CollectionAssert

    MbUnit also has collection assertions similar to NUnit: Assert.Collections.cs

    0 讨论(0)
  • 2020-12-05 02:05

    Recently, I was using xUnit 2.4.0 and Moq 4.10.1 packages in my asp.net core 2.2 app.

    In my case I managed to get it work with two steps process:

    1. Defining an implementation of IEqualityComparer<T>

    2. Pass the comparer instance as a third parameter into Assert.True method:

      Assert.True(expected, actual, new MyEqualityComparer());

    But there is another nicer way to get the same result using FluentAssertions package. It allows you to do the following:

    // Assert          
    expected.Should().BeEquivalentTo(actual));
    

    Interestingly that Assert.Equal() always fails even when I ordered the elements of two lists to get them in the same order.

    0 讨论(0)
  • 2020-12-05 02:20

    In the current version of XUnit (1.5) you can just use

    Assert.Equal(expected, actual);

    The above method will do an element by element comparison of the two lists. I'm not sure if this works for any prior version.

    0 讨论(0)
  • 2020-12-05 02:24

    With xUnit, should you want to cherry pick properties of each element to test you can use Assert.Collection.

    Assert.Collection(elements, 
      elem1 => Assert.Equal(expect1, elem1.SomeProperty),
      elem2 => { 
         Assert.Equal(expect2, elem2.SomeProperty);
         Assert.True(elem2.TrueProperty);
      });
    

    This tests the expected count and ensures that each action is verified.

    0 讨论(0)
提交回复
热议问题