Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试断言日期时间_C#_Unit Testing_Assert - Fatal编程技术网

C# 单元测试断言日期时间

C# 单元测试断言日期时间,c#,unit-testing,assert,C#,Unit Testing,Assert,我在TimeSpan上有一个单元测试,我不知道我是否做对了 测试用例: /// <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.

我在
TimeSpan
上有一个单元测试,我不知道我是否做对了

测试用例:

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

DateTime和TimeSpan类型之间可能存在误解。DateTime是表示时间点的数据类型,例如1776年7月4日下午12点。TimeSpan表示经过的时间/持续时间,即比赛持续12小时36分钟

您可以取两个日期时间的差来生成时间跨度。试图将时间解析为时间跨度是很困难的。例如,如何将上午9:30转换为时间跨度

如果您正在寻找如何测试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);
}

它做了你认为它应该做的事吗?我们真的不可能知道你期望什么,因此也不可能知道它是否给了你你期望的结果。我不明白你为什么需要在那里进行单元测试。您的方法基本上与TryParse相同。我第一次编写单元测试,因此我希望它能像上面解释的那样“尝试将字符串解析为timespan,并将解析后的值作为timespan返回,如果失败则返回null”我不认为我所做的对Timespan测试是正确的。你似乎在断言一个可为空的Timespan等于一个datetime。这永远不会是真的。谢谢,我不知道时间跨度是什么。我已经为datetime做了一个测试,所以我不会再做另一个了。我想知道的是如何测试timespan。谢谢你,我已经用如何测试时间跨度的例子更新了上面的答案。请注意最后一个测试,我将取两个日期时间的差,并将其与ParseTimeSpan方法的结果进行比较。这正是我要寻找的。谢谢
 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);
}