我在单元测试运行期间解析日期时遇到问题,但我无法重现它。 为了使它更有趣,当测试由持续集成过程运行时失败但在Visual Studio中运行时成功,并且它们都在同一台机器上运行,尽管使用不同的用户。
以下是测试:
[Test]
public void Test()
{
DateTime.Parse("21/12/2009", CultureInfo.CreateSpecificCulture("it-IT"));
}
(意大利语短日期格式为dd / MM / yyyy)
我期望它失败的原因是我在机器上进行了国际设置修改,以便意大利文化的短日期模式是dd / MM / yy,但看起来它要么没有选择它正确或足够智能,无论如何都能解析它,至少在我手动运行它时。
如何让测试失败?
答案 0 :(得分:2)
即使您正在使用CultureInfo对象,DateTime.Parse也会针对多种模式尝试您的字符串,以避免抛出异常。魔鬼在细节中 - 您应该深入查看DateTime.Parse的文档。
“足够智能解析它”可能正在发生的事情。您应该使用ParseExact
并明确提供格式字符串以使其失败。
答案 1 :(得分:1)
所以...如果我错了,请纠正我,但不是每个用户的区域设置?因此,如果您修改两个用户的设置,测试应该是一致的......
好的,尝试打印出框架认为是两个用户的日期模式,这里是doco:
http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo_members.aspx
试试CultureInfo.DateTimeFormatInfo.ShortDatePattern
,我认为这就是dd/mm/yy(yy)
。
答案 2 :(得分:1)
不要让测试依赖于基于用户配置文件的服务器设置。相反,尝试这种方法:
DateTime.ParseExact("21/12/2009", "d'/'M'/'yy", CultureInfo.InvariantCulture);
答案 3 :(得分:0)
你的配置中有globalization setting吗?