13

I am writing some unit tests using specflow and need a way to check whether a list of objects is ordered by a specific property. Currently I am doing it like this, but I am not sure if this is the best way to go about it.

var listFromApi = listOfObjects;

var sortedList = listFromApi.OrderBy(x => x.Property);

Assert.IsTrue(listFromApi.SequenceEqual(sortedList));

Is there a nice way this can be done using Fluent Assertions?

Sam Holder
  • 32,535
  • 13
  • 101
  • 181
TomJerrum
  • 584
  • 1
  • 5
  • 20

2 Answers2

28

Yes. You can use BeInAscendingOrder with a lambda.

listFromApi.Should().BeInAscendingOrder(x => x.Property);

For extra clarity at the expense of performance, you can also assert on content equivalence:

listFromApi.Should().BeEquivalentTo(listOfObjects)
    .And.BeInAscendingOrder(x => x.Property);
Paul Hicks
  • 13,289
  • 5
  • 51
  • 78
8

It is possible to pass the options like:

listFromApi.Should().BeEquivalentTo(sortedList, opt => opt.WithStrictOrdering());
Guilherme Porto
  • 101
  • 1
  • 4