Я обновил Visual Studio с 2019 по 2022 год и начал получать следующую ошибку при запуске модульных тестов (я использую адаптер Google Test (версия 1.17.0.32) и платформу Google Test для проекта C++):
##[error]An exception occurred while invoking executor 'executor://codedwebtestadapter/v1': The type initializer for 'Microsoft.VisualStudio.TestPlatform.Extensions.TmiHelper.Constants' threw an exception.
##[error]Stack trace:
##[error] at Microsoft.VisualStudio.TestPlatform.Extensions.TmiHelper.TmiBridge..ctor()
##[error] at Microsoft.VisualStudio.TestPlatform.Extensions.CodedWebTestAdapter.CodedWebTestExecutor.RunTests(IEnumerable`1 sources, IRunContext runContext, IFrameworkHandle frameworkHandle)
##[error] at Microsoft.VisualStudio.TestPlatform.Common.ExtensionDecorators.SerialTestRunDecorator.RunTests(IEnumerable`1 sources, IRunContext runContext, IFrameworkHandle frameworkHandle) in /_/src/Microsoft.TestPlatform.Common/ExtensionDecorators/SerialTestRunDecorator.cs:line 59
##[error] at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.RunTestsWithSources.InvokeExecutor(LazyExtension`2 executor, Tuple`2 executorUriExtensionTuple, RunContext runContext, IFrameworkHandle frameworkHandle) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/RunTestsWithSources.cs:line 116
##[error] at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.BaseRunTests.<>c__DisplayClass46_0.<RunTestInternalWithExecutors>b__0() in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/BaseRunTests.cs:line 464
##[error] at Microsoft.VisualStudio.TestPlatform.PlatformAbstractions.PlatformThread.<>c__DisplayClass0_0.<Run>b__0() in /_/src/Microsoft.TestPlatform.PlatformAbstractions/net462/System/PlatformThread.cs:line 29
##[error]--- End of stack trace from previous location where exception was thrown ---
##[error] at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
##[error] at Microsoft.VisualStudio.TestPlatform.PlatformAbstractions.PlatformThread.Run(Action action, PlatformApartmentState apartmentState, Boolean waitForCompletion) in /_/src/Microsoft.TestPlatform.PlatformAbstractions/net462/System/PlatformThread.cs:line 47
##[error] at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.BaseRunTests.TryToRunInStaThread(Action action, Boolean waitForCompletion) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/BaseRunTests.cs:line 680
##[error] at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.BaseRunTests.RunTestInternalWithExecutors(IEnumerable`1 executorUriExtensionMap, Int64 totalTests) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/BaseRunTests.cs:line 464
##[error]
##[error]Inner exception: Cannot register property 'TestType' as value type 'System.Guid' because it was already registered as 'System.String'.
##[error]
##[error]Stack trace:
##[error] at Microsoft.VisualStudio.TestPlatform.ObjectModel.TestProperty.Register(String id, String label, String category, String description, Type valueType, ValidateValueCallback validateValueCallback, TestPropertyAttributes attributes, Type owner) in /_/src/Microsoft.TestPlatform.ObjectModel/TestProperty/TestProperty.cs:line 347
##[error] at Microsoft.VisualStudio.TestPlatform.ObjectModel.TestProperty.Register(String id, String label, Type valueType, TestPropertyAttributes attributes, Type owner) in /_/src/Microsoft.TestPlatform.ObjectModel/TestProperty/TestProperty.cs:line 304
##[error] at Microsoft.VisualStudio.TestPlatform.Extensions.TmiHelper.Constants..cctor()
Как вы видите выше, основная часть ошибки:
Невозможно зарегистрировать свойство TestType как тип значения System.Guid, поскольку оно уже зарегистрировано как System.String.
Ошибка возникает в следующей задаче Azure Pipeline:
- task: VSTest@2
displayName: 'Run tests and coverage'
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**\RunUnitTests.exe
searchFolder: '$(Build.SourcesDirectory)/build/build.$(BuildSystem).$(BuildPlatform).multi'
pathtoCustomTestAdapters: '$(GoogleTestAdapterPath)' # Test Adapter for Google Test (MSFT fork of Google Test Adapter, shipped with VS2019 and VS2022)
codeCoverageEnabled: 'true'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
runSettingsFile: '$(Build.SourcesDirectory)\tools\ClientSDKTools\libmrh.runsettings'
condition: and(succeeded(), eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildSystem'], 'Windows'))
Я подозреваю, что в тестовых библиотеках есть несоответствие/несогласованность библиотек.
Вещи, которые я пробовал:
@Т.С. Я обновил пакет Micrososft.TestPlatform через nuget -> «dotnet add package Microsoft.TestPlatform» для различных проектов в репозитории, но все равно получил ту же ошибку.
@KamranBigdely Это известная проблема в версии VS 2022 17.10. И это было исправлено в предварительной версии 17.12 (сейчас в процессе релиза). Я поделился соответствующим билетом в ответе. А в Azure Devops вы можете откатить версию vs при запуске задачи vstest.
Невозможно зарегистрировать свойство TestType как тип значения System.Guid, поскольку оно уже зарегистрировано как System.String.
Это известная проблема в последних версиях Visual Studio 2022. Обратитесь к этому билету: VS2022 17.10.1 выдает ошибку в конвейерах Azure DevOps (самостоятельно размещенных) с помощью VSTest@2
Проблема связана с изменениями, внесенными в тест Google несколько месяцев назад. Вот подробности: Исправьте настройки параметризованного теста
Я проверил внутренний ресурс и подтвердил, что проблема исправлена в Visual Studio 2022 версии 17.12.
В настоящее время Visual Studio 2022 17.12 находится в стадии выпуска. Нам еще нужно немного подождать. Вы можете продолжать следить за билетом выше, чтобы проверить обновление.
Если вы используете Azure DevOps Pipeline, я хотел бы поделиться обходным решением:
Вы можете использовать задачу установщика тестовой платформы Visual Studio, чтобы вернуться к старой версии Visual Studio 2022 17.8. И установите vsTestVersion: 'toolsInstaller'
в задаче VStest.
steps:
- task: VisualStudioTestPlatformInstaller@1
inputs:
packageFeedSelector: 'nugetOrg'
versionSelector: 'specificVersion'
testPlatformVersion: '17.8.0'
- task: VSTest@2
displayName: 'Run tests and coverage'
inputs:
testSelector: 'testAssemblies'
vsTestVersion: 'toolsInstaller'
testAssemblyVer2: |
**\RunUnitTests.exe
searchFolder: '$(Build.SourcesDirectory)/build/build.$(BuildSystem).$(BuildPlatform).multi'
pathtoCustomTestAdapters: '$(GoogleTestAdapterPath)' # Test Adapter for Google Test (MSFT fork of Google Test Adapter, shipped with VS2019 and VS2022)
codeCoverageEnabled: 'true'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
runSettingsFile: '$(Build.SourcesDirectory)\tools\ClientSDKTools\libmrh.runsettings'
condition: and(succeeded(), eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildSystem'], 'Windows'))
Приятно осознавать, что это известная ошибка. Обходной путь у меня не сработал. Даже после перехода на версию 17.8.0 я получаю эту ошибку.
обновите пакеты Microsoft.VisualStudio.TestPlatform до последней версии.