Есть ли способ изменить культуру потока по умолчанию в командной службе Visual Studio?

У меня есть учетная запись VSTS в регионе США. И у меня есть куча модульных тестов, которые успешно выполняются на моем локальном сервере. Но при развертывании на VSTS все тесты, связанные с датой и временем, не пройдены. Я предполагаю, что это связано с тем, что интерпретация формата даты и времени отличается, поскольку мой локальный использует формат Великобритании. Поскольку существует довольно много тестовых проектов, вместо того, чтобы менять их по отдельности, есть ли способ изменить текущую культуру потока по умолчанию VSTS как Великобританию? Я знаю, что, возможно, смена региона поможет, но как иначе?


person user8036759    schedule 03.02.2018    source источник


Ответы (1)


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

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

Я бы лично попытался сделать код более устойчивым, например. явно задайте правильный язык и региональные параметры и по возможности полагайтесь на InvariantCulture.

Если вам нужен простой выход, вы можете сделать одно из следующих действий:

Используйте инициализатор

Добавьте один метод в свой тестовый проект и украсьте его с атрибутом [AssemblyInitializer]:

[TestClass()]
public sealed class CultureInitializer
{
    [AssemblyInitialize()]
    public static void AssemblyInit(TestContext context)
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
        Thread.CurrentThread.CurrentUiCulture = new CultureInfo("en-GB");
    }
}

Принудительно настроить параметры культуры профиля пользователя

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

Данные хранятся в реестре в следующем месте:

HKEY_CURRENT_USER\Control Panel\International

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

Запустите скрипт в определении сборки до начала тестов.

Set-Culture -CultureInfo en-GB
person jessehouwing    schedule 03.02.2018
comment
спасибо jessehouwing за ваш ответ, я бы предпочел второе предложение, так как первое будет слишком большим количеством инициализаций для количества тестовых проектов/классов. Но, поскольку я использую VSTS онлайн, я не могу сделать что-то подобное? Спасибо - person user8036759; 04.02.2018
comment
Powershell может изменить региональные настройки, перезаписав существующие значения для пользователя агента сборки. Но, пожалуйста, исправьте свои тесты. - person jessehouwing; 04.02.2018
comment
Да, как вы просветили, я добавил скрипт powershell для изменения культуры перед запуском модульных тестов, теперь он работает. Я должен был исправить тесты, но это на потом, большое спасибо. - person user8036759; 04.02.2018
comment
Было бы полезно поделиться сценарием. Не стесняйтесь редактировать мой ответ и просто добавить его. - person jessehouwing; 04.02.2018