2016-09-29 2 views
1

У меня есть единичный тест на TimeSpan, и я не знаю, правильно ли я делаю это.C# unit test assert datetime

TEST СЛУЧАЙ:

/// <summary> 
    /// Wrapper around TimeSpan.TryParse that avoids out parameters. 
    /// Tries to parse a string as a TimeSpan and returns the parsed value as a TimeSpan or null if parsing failed. 
    /// </summary> 
    /// <param name="toParse">A string containing a value to convert</param> 
    /// <param name="formatProvider">An object that provides culture-specific formatting information</param> 
    /// <returns>The value parsed as a TimeSpan or null if parsing failed</returns> 
     public static TimeSpan? ParseTimeSpan(this string toParse, IFormatProvider formatProvider) 
    { 
     TimeSpan value; 
     if (TimeSpan.TryParse(toParse, formatProvider, out value)) 
     { 
      return value; 
     } 
     return null; 
    } 

БЛОК ТЕСТ:

 [TestMethod()] 
    public void ParseTimeSpanTest() 
    { 
     Assert.AreEqual(ParseTime("5:33 pm"), "5:33".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(ParseTime("9:22 AM"), "9:22 AM".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(ParseTime("8:22 pm"), "8:22 pm".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(ParseTime("7:22:44 AM"), "7:22:44 AM".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(ParseTime("9:22:44 pm"), "9:22:44 pm".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(ParseTime("13:22:14"), "13:22:14".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(ParseTime("23:59:00"), "23:59:00".ParseTimeSpan(CultureInfo.InvariantCulture)); 

     Assert.AreEqual(null, "25:59:00".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(null, "23:70:00 ".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(null, "23:59:75".ParseTimeSpan(CultureInfo.InvariantCulture)); 
     Assert.AreEqual(null, "five thirty".ParseTimeSpan(CultureInfo.InvariantCulture)); 


    } 




    private static DateTime ParseTime(string time) 
    { 
     return DateTime.Parse(time, System.Globalization.CultureInfo.InvariantCulture); 
    } 
+3

Это делает то, что вы считаете нужным? Мы не можем знать, чего вы ожидаете, и потому ли это дает вам ожидаемый результат. – LordWilmore

+1

У меня нет причины, по которой вам нужен UnitTest. Ваш метод в основном делает то же самое, что и TryParse. – greenhoorn

+0

Мой первый раз, когда я записываю единичный тест, поэтому им следует делать то, что объясняет выше »пытается проанализировать строку как временной интервал и возвращает анализируемое значение как период времени или нуль, если сбой» – Dnguy025

ответ

0

Там может быть заблуждением между типами DateTime и TimeSpan. DateTime - это тип данных, предназначенный для представления момента времени, например. 4 июля 1776 года в 12 часов. TimeSpan предназначен для представления прошедшего времени/продолжительности, т. Е. Гонка длилась 12 часов 36 минут.

Вы можете изменить разницу между двумя DateTimes, чтобы создать TimeSpan. Попытка разобрать время в промежутке времени трудно. Например, как конвертировать 9:30 утра в TimeSpan?

Если вы ищете, как тестировать TimeSpan, возможно, ниже поможет.

public static TimeSpan? ParseTimeSpan(this string toParse, IFormatProvider formatProvider) 
    { 
     TimeSpan value; 
     if (TimeSpan.TryParse(toParse, formatProvider, out value)) 
     { 
      return value; 
     } 
     return null; 
    } 

[TestMethod()] 
public void ParseTimeSpanTest() 
{ 
    Assert.AreEqual(ParseTime("5:33"), "5:33".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(ParseTime("9:22"), "9:22".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(ParseTime("8:22"), "8:22".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(ParseTime("7:22:44"), "7:22:44".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(ParseTime("9:22:44"), "9:22:44".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(ParseTime("13:22:14"), "13:22:14".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(ParseTime("23:59:00"), "23:59:00".ParseTimeSpan(CultureInfo.InvariantCulture)); 

    Assert.AreEqual(null, "22:59:00 AM".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(null, "23:70:00 PM".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(null, "23:59:75 AM".ParseTimeSpan(CultureInfo.InvariantCulture)); 
    Assert.AreEqual(null, "five thirty PM".ParseTimeSpan(CultureInfo.InvariantCulture)); 

    var dt = DateTime.Now; 
    Assert.AreEqual(dt.AddHours(1) - dt, "1:00".ParseTimeSpan(CultureInfo.InvariantCulture)); 
} 

private static TimeSpan ParseTime(string time) 
{ 
    return TimeSpan.Parse(time, CultureInfo.InvariantCulture); 
} 
+0

Спасибо, я понимаю, какой промежуток времени. И я уже провел тест на datetime, поэтому я не буду делать другого. То, что я хотел знать, - это то, как я могу проверить время. Еще раз спасибо – Dnguy025

+0

Я обновил ответ выше с примерами того, как тестировать время. Обратите внимание на последний тест, в котором я беру разницу двух DateTime и сравниваю его с результатом метода ParseTimeSpan. –

+0

Именно это я и ищу. благодаря – Dnguy025