Я выполняю рефакторинг некоторых модульных тестов и обнаружил, что некоторые стратегии синтаксического анализа основаны на DateTime.TryParseExact
и sbyte.TryPase
, которые сами полагаются на NumberFormatInfo.CurrentInfo
и DateTimeFormatInfo.CurrentInfo
.
Для того чтобы мои модульные тесты были правильно организованы, я решил установить свойство CurrentInfo
обоих NumberFormatInfo
и DateTimeFormatInfo
для их неизменных разновидностей через:
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
Однако из любопытства я попытался проверить, были ли соответствующие InvariantInfo
настроены с помощью юнит-теста, и оказалось, что нет, это не так. Мне интересно, чего мне здесь не хватает, чтобы принудительно применить InvariantCulture
в этих двух CurrentInfo
[Fact]
public void ShouldReturnInvariantInfo()
{
CultureInfo.CurrentCulture.NumberFormat = NumberFormatInfo.InvariantInfo;
CultureInfo.CurrentCulture.DateTimeFormat = DateTimeFormatInfo.InvariantInfo;
NumberFormatInfo.CurrentInfo.Should().Be(NumberFormatInfo.InvariantInfo);
DateTimeFormatInfo.CurrentInfo.Should().Be(DateTimeFormatInfo.InvariantInfo);
}
Зная, что базовые реализации:
NumberFormatInfo.InvariantInfo
public static NumberFormatInfo CurrentInfo
{
get
{
CultureInfo currentCulture = CultureInfo.CurrentCulture;
if (!currentCulture._isInherited)
{
NumberFormatInfo numInfo = currentCulture.numInfo;
if (numInfo != null)
return numInfo;
}
return (NumberFormatInfo) currentCulture.GetFormat(typeof (NumberFormatInfo));
}
}
DateTimeFormatInfo.CurrentInfo
public static DateTimeFormatInfo CurrentInfo
{
get
{
CultureInfo currentCulture = CultureInfo.CurrentCulture;
if (!currentCulture._isInherited)
{
DateTimeFormatInfo dateTimeInfo = currentCulture.dateTimeInfo;
if (dateTimeInfo != null)
return dateTimeInfo;
}
return (DateTimeFormatInfo) currentCulture.GetFormat(typeof (DateTimeFormatInfo));
}
}