2

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

这是测试:

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

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

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

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

4

4 回答 4

2

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

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

于 2010-01-14T23:22:38.257 回答
1

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

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

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

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

于 2010-01-14T23:18:41.337 回答
1

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

DateTime.ParseExact("21/12/2009", "d'/'M'/'yy", CultureInfo.InvariantCulture);
于 2010-01-14T23:38:09.987 回答
0

您的配置中有全球化设置吗?

于 2010-01-14T23:08:11.407 回答