2016-09-29 36 views
1

我有一個單元測試TimeSpan,我不知道我是否做得對。C#單元測試斷言日期時間

測試用例:

/// <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和時間跨度之間的誤解。 DateTime是代表時間點的數據類型,例如, 1776年7月4日下午12點。 TimeSpan旨在表示經過的時間/持續時間,即比賽持續12小時36分鐘。

您可以取兩個DateTime的差異來產生TimeSpan。試圖將時間解析爲時間跨度是很難做到的。例如,如何將9:30 AM轉換爲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

謝謝,我niw理解什麼是時間跨度。而且我已經爲日期時間做了測試,所以我不會再做一次。我想知道的是我如何測試時間跨度。再次感謝 – Dnguy025

+0

我已經用上面的答案更新瞭如何測試時間跨度的例子。請注意最後一個測試,我將兩個DateTime的差異與ParseTimeSpan方法的結果進行比較。 –

+0

這正是我要找的。謝謝 – Dnguy025