2010-01-14 47 views
2

我在单元测试运行期间解析日期时遇到问题,但无法重现。 为了使它更有趣,它在测试由持续集成过程运行时失败,但在Visual Studio中运行时成功,并且它们都在同一台计算机上运行,​​尽管使用的是不同的用户。测试在C#中解析此DateTime失败?

这里的测试:

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

(在意大利的短日期格式为DD/MM/YYYY)

我希望它失败的原因是,我有国际设置上修改过的机器使意大利文化的短日期模式为dd/MM/yy,但它看起来好像不是正确地选择它,或者足够聪明以至于无论如何都能解析它,至少当我手动运行时。

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

+0

您是如何更改机器上IT-IT的国际设置的? – mlsteeves 2010-01-14 23:13:47

+0

通过控制面板 – Simone 2010-01-14 23:31:18

回答

2

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

“智能足以解析它”可能是发生了什么事情。您应该使用ParseExact并明确提供格式字符串以使其失败。

1

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

OK,试图打印出什么框架认为是在两个用户的日期模式,这里是DOCO:

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

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

+0

这可能是真的,那就是为什么,如果是这种情况,我希望它在CI期间成功运行,因为该用户将有一个未触及的意大利文化,并使用明确的文化解析应该成功。 – Simone 2010-01-14 23:34:39

+0

这就是我所做的。将回报我发现的内容。我仍然不明白为什么它失败了。 – Simone 2010-01-15 20:18:35

1

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

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