在C#中测试此日期时间解析失败?

在C#中测试此日期时间解析失败?,c#,datetime,parsing,cultureinfo,C#,Datetime,Parsing,Cultureinfo,我在单元测试运行期间解析日期时遇到问题,但我无法重现它。 更有趣的是,当测试通过连续集成过程运行时失败,但在VisualStudio中运行时成功,并且它们都在同一台机器上运行,尽管用户不同 以下是测试: [Test] public void Test() { DateTime.Parse("21/12/2009", CultureInfo.CreateSpecificCulture("it-IT")); } (意大利语的短日期格式为dd/MM/yyyy) 我希望它失败的原因是,我修改了

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

以下是测试:

[Test]
public void Test()
{
    DateTime.Parse("21/12/2009", CultureInfo.CreateSpecificCulture("it-IT"));
}
(意大利语的短日期格式为dd/MM/yyyy)

我希望它失败的原因是,我修改了机器上的国际设置,以便意大利文化的短日期模式是dd/MM/yy,但看起来它要么没有正确拾取它,要么足够聪明,无论如何都能够解析它,至少在我手动运行它时是这样


你知道如何使测试失败吗?

你的配置中有一个吗?

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

好的,试着打印出框架认为两个用户的日期模式,下面是文档:


试试
CultureInfo.DateTimeFormatInfo.ShortDatePattern
,我认为这就是
dd/mm/yy(yy)
的含义。

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


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

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

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

不,根本没有配置文件。早给它,可能会有帮助。但它可能不会。你是如何在计算机上更改它的国际设置的?这可能是真的,这就是为什么,如果是这样,我希望它在CI运行期间成功,因为该用户将拥有未触及的意大利文化,并且使用显式文化的解析应该成功。这就是我所做的。我会把我发现的情况汇报给你。我仍然不明白为什么它会失败。