一尘不染

如何检查列表是否已订购?

c#

我正在做一些单元测试,我想知道是否有任何方法可以测试列表是否按其包含的对象的属性排序。

现在我正在这样做,但是我不喜欢它,我想要一个更好的方法。有人可以帮我吗?

// (fill the list)
List<StudyFeedItem> studyFeeds = 
    Feeds.GetStudyFeeds(2120, DateTime.Today.AddDays(-200), 20);

StudyFeedItem previous = studyFeeds.First();

foreach (StudyFeedItem item in studyFeeds)
{
    if (item != previous)
    {
        Assert.IsTrue(previous.Date > item.Date);
    }

    previous = item;
}

阅读 312

收藏
2020-05-19

共1个答案

一尘不染

如果您使用的是MSTest,则可能需要看一下CollectionAssert.AreEqual

Enumerable.SequenceEqual可能是在断言中使用的另一个有用的API。

在这两种情况下,您都应准备一个按预期顺序保存预期列表的列表,然后将该列表与结果进行比较。

这是一个例子:

var studyFeeds = Feeds.GetStudyFeeds(2120, DateTime.Today.AddDays(-200), 20);   
var expectedList = studyFeeds.OrderByDescending(x => x.Date);
Assert.IsTrue(expectedList.SequenceEqual(studyFeeds));
2020-05-19