У меня есть тестовый код, включая строки ниже. Код просто возвращает подходящий часовой пояс на основе известного смещения, поскольку имя часового пояса не будет использовано позже. параметр имеет целочисленное значение в качестве смещения, поэтому я могу запросить его.
timeZoneInfo = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(tz => tz.BaseUtcOffset.Hours == param.Offset);
return timeZoneInfo;
В Travis-CI я получаю сообщение об ошибке ниже.
Error Message:
Test method Foo.Tests.SomeClassTests.TimeZoneAbbreviationTest threw exception:
System.ArgumentNullException: Value cannot be null. (Parameter 'timeZoneInfo')
Stack Trace:
at Foo.TimeZoneInfoExtensions.Bar(TimeZoneInfo timeZoneInfo) in /home/travis/build/user/Foo/Foo/TimeZoneInfoExtensions.cs:line 11
at Foo.SomeClass.set_TimeZoneOffset(Int32 value) in /home/travis/build/user/Foo/Foo/SomeClass.cs:line 26
at Foo.Tests.SomeClassTests.TimeZoneAbbreviationTest(String name, String abbr, Int32 offset) in /home/travis/build/user/Foo/Foo.Tests/SomeClassTests.cs:line 47
Я предположил, что do tnet Класс core TimeZoneInfo
является кроссплатформенным, но, похоже, это не так. Я подумываю об использовании NodaTime, но я постарался максимально упростить процесс проверки концепции. Поэтому я сейчас работаю над do tnet core 3.1. с MSTest . Вы можете увидеть файл .travis.yml
ниже.
language: csharp
mono: none
dotnet: 3.1
solution: Foo.sln
script:
- dotnet restore
- dotnet test
Есть ли способ решить эту проблему, так как она должна работать кроссплатформенно? Или я должен сдаться?
Редактировать: После небольшого рефакторинга, чтобы указать источник, видно, что проблема только в UT C -12.00. Запрос LINQ возвращает ноль, если смещение равно -12.