如何使用 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
我正在用 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