Как проверить TimeZoneInfo.GetSystemTimeZones () на Travis-ci - PullRequest
0 голосов
/ 22 марта 2020

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

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.

...