如何使用 NUNIT 断言日期集合是升序还是降序

How to assert with NUNIT that a collection of dates is in ascending or descending order

我正在用 Selenium 编写几个测试来检查网页上的日期列表是按降序还是升序排序的。日期格式如下:dd-mm-yyyy.

对于此网页上的其他 Alfanumeric 项目,我使用的是来自 NUNIT3 框架的 CollectionOrderedConstraint Is.Ordered 升序和降序。对于上述格式的日期,这是不合适的。

NUNIT3 有办法完成这个检查吗?

如果不能,如何使用 C# 以另一种方式完成此操作?

当我做这样的事情时,我通常只是抓取页面以获取 DateTime 的列表,复制该列表,对克隆的列表进行排序,然后使用 [= 将其与原始列表进行比较14=]。如果原始列表没有正确排序,比较将失败。一个例子...

[Test]
public void CompareDatesFail()
{
    // dates are NOT in order
    DateTime[] dates = { ParseDate("15-01-2020"), ParseDate("15-03-2020"), ParseDate("15-02-2020") };
    VerifyDatesAreSorted(dates);
}

[Test]
public void CompareDatesPass()
{
    // dates are in order
    DateTime[] dates = { ParseDate("15-01-2020"), ParseDate("15-02-2020"), ParseDate("15-03-2020") };
    VerifyDatesAreSorted(dates);
}

由于您可能需要对 DateTime 进行大量字符串解析,因此我创建了一个在一个地方处理此问题的方法。

/// <summary>
/// Returns the DateTime for the provided dd-MM-yyyy formatted string
/// </summary>
/// <param name="dateTimeString">The dd-MM-yyyy formatted string</param>
/// <returns>A DateTime instance</returns>
public DateTime ParseDate(string dateTimeString)
{
    return DateTime.ParseExact(dateTimeString, "dd-MM-yyyy", CultureInfo.InvariantCulture);
}

由于此验证可能会发生多次,因此将代码封装在一个方法中。

/// <summary>
/// Verifies that the provided array of DateTime instances are sorted
/// </summary>
/// <param name="dates">An array of DateTime instances</param>
public void VerifyDatesAreSorted(DateTime[] dates)
{
    DateTime[] sortedDates = (DateTime[])dates.Clone();
    Array.Sort(sortedDates);
    CollectionAssert.AreEqual(sortedDates, dates, "Verify dates are sorted");
}

一些参考资料
DateTime.ParseExact Method
Custom date and time format strings