2016-09-29 10 views
1

私はTimeSpanのユニットテストをしています。C#ユニットテストアサートdatetime

テストケース:

/// <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

私は初めて単体テストを書くので、expextingは上で説明したことを行う必要があります。「タイムパースとして文字列を解析しようとすると、解析された値をtimespanまたはnullとして返します」 – Dnguy025

答えて

0

種類のDateTimeとTimeSpanの間に誤解があるかもしれません。 DateTimeはある時点を表すためのデータ型である。 1776年7月4日午後12時。 TimeSpanは、経過時間/継続時間、すなわちレースが12時間36分続いたことを意味する。

TimeSpanを生成するために、2つのDateTimesの違いを利用することができます。時間を時間軸に解析しようとするのは難しいです。たとえば、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

ありがとう、私は何時の間には理解しています。そして私はすでにdatetimeのテストを行ったので、別のテストをやっていません。私が知りたかったのは、タイムパンをテストする方法でした。もう一度ありがとう – Dnguy025

+0

私はtimespanをテストする方法の例で上記の答えを更新しました。私が2つのDateTimeの違いをとり、それをParseTimeSpanメソッドの結果と比較する最後のテストに注意してください。 –

+0

これはまさに私が探しているものです。ありがとう – Dnguy025