【问题标题】:Test to fail this DateTime parsing in C#?在 C# 中测试此 DateTime 解析是否失败?
【发布时间】:2010-01-14 23:02:41
【问题描述】:

我在单元测试运行期间解析日期时遇到问题,但我无法重现它。 为了让它更有趣,当测试通过持续集成过程运行时它会失败,但在 Visual Studio 中运行时会成功,并且它们都在同一台机器上运行,尽管用户不同。

这是测试:

[Test]
public void Test()
{
    DateTime.Parse("21/12/2009", CultureInfo.CreateSpecificCulture("it-IT"));
}

(在意大利语中,短日期格式为 dd/MM/yyyy)

我预计它会失败的原因是我修改了机器上的国际设置,以便意大利文化的短日期模式是 dd/MM/yy,但看起来它要么没有选择它至少当我手动运行它时,正确或足够聪明地能够解析它。

任何想法如何使测试失败?

【问题讨论】:

  • 您是如何在机器上更改 it-IT 的国际设置的?

标签: c# datetime parsing cultureinfo


【解决方案1】:

即使您使用的是 CultureInfo 对象,DateTime.Parse 也会针对多种模式尝试您的字符串,以尽量避免引发异常。魔鬼在细节中 - 您可能应该深入查看DateTime.Parse 的文档。

“无论如何都足够聪明地解析它”可能是正在发生的事情。您应该使用ParseExact 并明确提供格式字符串以使其失败。

【讨论】:

    【解决方案2】:

    不要让您的测试依赖于基于用户配置文件的服务器设置。相反,请尝试以下方法:

    DateTime.ParseExact("21/12/2009", "d'/'M'/'yy", CultureInfo.InvariantCulture);
    

    【讨论】:

      【解决方案3】:

      所以...如果我错了,请纠正我,但不是每个用户的区域设置吗?因此,如果您修改两个用户的设置,测试应该是一致的......

      好的,尝试打印出框架认为是两个用户的日期模式,这里是文档:

      http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo_members.aspx

      试试CultureInfo.DateTimeFormatInfo.ShortDatePattern,我想dd/mm/yy(yy)就是这样。

      【讨论】:

      • 这可能是真的,这就是为什么,如果是这种情况,我希望它在 CI 运行期间成功,因为该用户将拥有未触及的意大利文化并且使用显式文化进行解析应该会成功。
      • 我就是这么做的。将报告我发现的内容。我仍然不明白为什么它会失败。
      【解决方案4】:

      你的配置中有globalization setting吗?

      【讨论】:

      • 不,根本没有配置文件。
      • 先给它,它可能会有所帮助。但它可能不会。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多