Как с NUNIT утверждать, что коллекция дат находится в порядке возрастания или убывания - PullRequest
0 голосов
/ 05 марта 2020

Я пишу пару тестов с Selenium, чтобы проверить, отсортирован ли список дат на веб-странице в порядке убывания или в порядке возрастания. Даты форматируются следующим образом: дд-мм-гггг.

Для других элементов Alfanumeri c на этой веб-странице я использую коллекцию CollectionOrderedConstraint Is.Ordered Ascending и Descending из инфраструктуры NUNIT3. Для дат в указанном формате это не подходит.

Есть ли способ с NUNIT3 выполнить sh эту проверку?

Если нет, как выполнить sh это другим способом с использование C#?

1 Ответ

0 голосов
/ 05 марта 2020

Когда я делаю подобные вещи, я обычно просто очищаю страницу, чтобы получить список DateTime, создаю клон списка, сортирую клонированный список и затем сравниваю его с оригиналом, используя CollectionAssert.AreEqual(). Если исходный список не был отсортирован правильно, сравнение не удастся. Пример ...

[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
Пользовательская дата и строки формата времени

...