Тест для сбоя этого анализа DateTime в C #?

2

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

Здесь тест:

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

(по-итальянски короткий формат даты - dd/MM/yyyy)

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

Любые идеи о том, как сделать тест неудачным?

  • 0
    Как вы изменили международные настройки для it-IT на машине?
  • 0
    Через панель управления
Теги:
datetime
parsing
cultureinfo

4 ответа

2
Лучший ответ

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

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

1

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

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

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

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

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

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

  • 0
    Вероятно, это правда, и поэтому именно поэтому, если это так, я ожидаю, что он будет успешным во время запуска CI, так как у этого пользователя будет нетронутая итальянская культура, и синтаксический анализ с использованием явной культуры должен завершиться успешно.
  • 0
    Это то, что я сделал. Отзовусь, что узнаю. Я все еще не понимаю, почему это терпит неудачу все же.
0

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

  • 0
    Нет, нет файла конфигурации вообще.
  • 0
    Отдай это назад, это может помочь. Но это не так.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню