#c# #unit-testing #azure-devops #pipeline #assemblies
#c# #модульное тестирование #azure-devops #конвейер #сборки
Вопрос:
Модульные тесты вызывают следующий метод. Он проходит при локальном запуске, но завершается сбоем при запуске как часть конвейера сборки Azure DevOps из-за исключения LoaderException в сборке.GetTypes() . Я не уверен, как это отладить, потому что это не происходит локально. Обычно я бы прогнал это в режиме отладки и посмотрел на исключение LoaderException. Задача конвейера VSTest @2 регистрирует только трассировку стека
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
if (assembly != null)
{ Type[] types = assembly.GetTypes(); }
}
Test method
Tests.Data.IBlockConversionTests.TestIBlockConversion threw exception:
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
Stack Trace:
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at System.Reflection.RuntimeModule.GetTypes()
at System.Reflection.Assembly.GetTypes()
at Plugin.PluginLoader`1.LoadPlugins(IEnumerable`1 assemblies) in D:a1sCorePluginPluginPluginLoader.cs:line 80
at Tests.Data.IBlockConversionTests.TestIBlockConversion() in D:a1sTestsDataIBlockConversionTests.cs:line 42
Комментарии:
1. Начните с просмотра сообщения об исключении
LoaderException
и любогоInnerExceptions
2. Как мне это сделать при запуске модульного теста на конвейере?
3. Есть ли средство ведения журнала, которое появляется в этой системе конвейера сборки?
4. Посмотрите на результаты вашего теста? Перехватить исключение и записать все, что вам нужно? Создайте специальное консольное приложение, которое просто воспроизводит проблему и печатает то, что вам нужно? Проявите фантазию!
5. Установите систему. Отладка до true docs.microsoft.com/en-us/azure/devops/pipelines/build / … чтобы проверить, будет ли что-то интересное
Ответ №1:
Решение состоит в том, чтобы изменить конвейер yaml, добавив distributionBatchType: ‘basedOnAssembly’, как показано ниже. Включение диагностики также устранило эту проблему, но не было идеальным решением.
- task: VSTest@2
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: |
**Tests**
!***TestAdapter.dll
!**obj**
searchFolder: '$(System.DefaultWorkingDirectory)'
diagnosticsEnabled: false
distributionBatchType: 'basedOnAssembly'
Комментарии:
1. Это также устранило проблему, с которой мы столкнулись в другом конвейере, где VSTest не смог найти определенные библиотеки DLL.