Мой модульный тест завершается с ошибкой TypeLoadException. Может ли это быть ошибка Visual Studio, взаимодействие с пакетом Nuget или что-то еще? - PullRequest
1 голос
/ 29 января 2020

У меня есть проект, который использует QuickFix. Net и Autofa c. Один из моих тестов xUnit создает контейнер для приложения и пытается разрешить один из основных экземпляров службы. Я создал этот тест как регрессионный тест, чтобы определить, когда я забываю регистрацию Autofa c.

Эти тесты недавно начали проваливаться, и странно то, что они жалуются на тип и сборку, которые я не использую. Не думаю, что мой код или сторонний код ссылаются. Autofa c не может создать экземпляр Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.ITestExecutionEnvironmentSpecifier при попытке создать экземпляр QuickFix.SocketInitiator. Я посмотрел на источник в GitHub для DefaultMessageFactory и вижу, что для получения сборок используется отражение, но это было там долгое время, поэтому я не думаю, что оно новое.

Я думаю, что это могло начаться, когда я обновил Visual Studio, но я не уверен. Может ли это быть ошибкой в ​​Visual Studio 2019?

Тест не пройден, независимо от того, запускаю ли я его непосредственно в Visual Studio или с помощью теста do tnet из командной строки, поэтому я не уверен.

Если у кого-то есть понимание, я был бы признателен

Редактировать: Вот некоторая дополнительная информация

  • Framework Target:. Net Core 2.2
  • Visual Studio: 16.3.4 с Resharper Ultimate 2019.2.3
  • Autofa c Версия: 4.9.0
  • XUnit Framework: 2.4.1

Вот некоторые вещи, которые я пробовал без успеха:

  • Добавление ссылки NuGet на 15.0 Microsoft.VisualStudio.TestPlatform.ObjectModel.dll для моей тестовой DLL, чтобы увидеть, не приведет ли это к ее включению и всем ее зависимостям во время выполнения.
  • Обновление до версии 16.4 той же библиотеки, это вызвало тихую ошибку при попытке запустить модульные тесты через ReSharper.
  • Обновление других зависимостей в моем проекте.

Вот основная часть трассировки стека:

Autofac.Core.DependencyResolutionException : An exception was thrown while activating MyApp.FixConnector.FixConnectorService -> QuickFix.Transport.SocketInitiator.
---- Autofac.Core.DependencyResolutionException : An exception was thrown while invoking the constructor 'Void .ctor(QuickFix.IApplication, QuickFix.IMessageStoreFactory, QuickFix.SessionSettings, QuickFix.ILogFactory)' on type 'SocketInitiator'.
-------- System.TypeLoadException : Could not load type 'Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.ITestExecutionEnvironmentSpecifier' from assembly 'Microsoft.VisualStudio.TestPlatform.ObjectModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget) in C:\projects\autofac\src\Autofac\Core\Resolving\InstanceLookup.cs:line 135
   at Autofac.Core.Resolving.InstanceLookup.Execute() in C:\projects\autofac\src\Autofac\Core\Resolving\InstanceLookup.cs:line 83
   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\Core\Resolving\ResolveOperation.cs:line 131
   at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\Core\Resolving\ResolveOperation.cs:line 84
   at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance) in C:\projects\autofac\src\Autofac\ResolutionExtensions.cs:line 1041
   at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\ResolutionExtensions.cs:line 871
   at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\ResolutionExtensions.cs:line 300
   at MyApp.Tests.Unit.FixConnector.FixConnectorDependencyInjectionTest.TestBuildContainer(String feedName, String feedEnvironment) in C:\dev\MyApp\MyApp.Tests\Unit\FixConnector\FixConnectorDependencyInjectionTest.cs:line 38
----- Inner Stack Trace -----
   at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate() in C:\projects\autofac\src\Autofac\Core\Activators\Reflection\ConstructorParameterBinding.cs:line 137
   at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\Core\Activators\Reflection\ReflectionActivator.cs:line 120
   at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget) in C:\projects\autofac\src\Autofac\Core\Resolving\InstanceLookup.cs:line 117
----- Inner Stack Trace -----
   at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)
   at System.Reflection.RuntimeAssembly.GetExportedTypes()
   at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.ToList()
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at QuickFix.DefaultMessageFactory.GetMessageFactories(IEnumerable`1 assemblies)
   at QuickFix.DefaultMessageFactory..ctor(String defaultApplVerId)
   at QuickFix.AbstractInitiator..ctor(IApplication app, IMessageStoreFactory storeFactory, SessionSettings settings, ILogFactory logFactory, IMessageFactory messageFactory)
   at QuickFix.Transport.SocketInitiator..ctor(IApplication application, IMessageStoreFactory storeFactory, SessionSettings settings, ILogFactory logFactory)
   at lambda_method(Closure , Object[] )
   at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate() in C:\projects\autofac\src\Autofac\Core\Activators\Reflection\ConstructorParameterBinding.cs:line 129


...