Тест для сбоя этого анализа DateTime в C #? - PullRequest
2 голосов
/ 15 января 2010

У меня проблема с анализом даты во время выполнения модульного теста, но я не могу воспроизвести ее. Чтобы сделать его более интересным, он не работает, когда тест выполняется процессом непрерывной интеграции, но успешен при запуске в Visual Studio, и они оба работают на одном компьютере, хотя и с другим пользователем.

Вот тест:

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

(на итальянском языке формат короткой даты - дд / мм / гггг)

Причина, по которой я ожидаю, что это не удастся, заключается в том, что я настроил международные параметры на машине так, чтобы краткий шаблон для итальянской культуры был дд / мм / гг, но похоже, что он либо не выбирает правильно или достаточно умен, чтобы иметь возможность разобрать его в любом случае, по крайней мере, когда я запускаю его вручную.

Есть идеи, как сделать тест неудачным?

Ответы [ 4 ]

2 голосов
/ 15 января 2010

Даже если вы используете объект CultureInfo, DateTime.Parse попробует вашу строку для нескольких шаблонов, чтобы избежать исключения. Дьявол кроется в деталях - вам, вероятно, стоит взглянуть на документацию для DateTime.Parse в глубину.

"Достаточно умный, чтобы разобрать его в любом случае" - это, вероятно, то, что происходит. Вы должны использовать ParseExact и явно указывать строку формата, чтобы она не работала.

1 голос
/ 15 января 2010

Не допускайте, чтобы ваши тесты зависели от настроек сервера на основе профиля пользователя. Вместо этого попробуйте этот подход:

DateTime.ParseExact("21/12/2009", "d'/'M'/'yy", CultureInfo.InvariantCulture);
1 голос
/ 15 января 2010

Итак ... Поправьте меня, если я ошибаюсь, но разве настройки локали для пользователя? Поэтому, если вы измените настройки для обоих пользователей, тесты должны быть согласованы ...

ОК, попробуйте распечатать то, что фреймворк считает образцом даты для обоих пользователей, вот документ:

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

Попробуйте CultureInfo.DateTimeFormatInfo.ShortDatePattern, я думаю, что это то, что dd/mm/yy(yy).

0 голосов
/ 15 января 2010

у вас есть параметр глобализации в вашей конфигурации?

...