EF Core 2.1 Ленивая загрузка в интеграционных тестах - PullRequest
0 голосов
/ 22 октября 2018

Я потратил пару дней на это, но не испытывал радости.

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

Message: System.Reflection.ReflectionTypeLoadException : Unable to load one or more of the requested types.
Could not load type 'Castle.Proxies.ChangeLogProxy' from assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.

Вот трассировка стека

Result StackTrace:  
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.RuntimeAssembly.get_DefinedTypes()
   at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.ToArray()
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at AutoMapper.ServiceCollectionExtensions.AddAutoMapperClasses(IServiceCollection services, Action`1 additionalInitAction, IEnumerable`1 assembliesToScan) in C:\projects\automapper-extensions-microsoft-dependencyinjectio\src\AutoMapper.Extensions.Microsoft.DependencyInjection\ServiceCollectionExtensions.cs:line 69
   at Web.Startup.ConfigureServices(IServiceCollection services) in C:\...\src\Web\Startup.cs:line 39
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.Initialize()
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
   at Microsoft.AspNetCore.TestHost.TestServer..ctor(IWebHostBuilder builder, IFeatureCollection featureCollection)
   at Web.IntegrationTests.Common.TestFixture`1..ctor(String relativeTargetProjectPatentDir) in C:\...\test\Web.IntegrationTests\Common\TestFixture.cs:line 111
   at Web.IntegrationTests.Common.TestFixture`1..ctor() in C:\...\test\Web.IntegrationTests\Common\TestFixture.cs:line 68
   at Web.IntegrationTests.MvcTests.StockProfileTests.StockProfilesControllerTests..ctor() in C:\...\test\Web.IntegrationTests\MvcTests\StockTests\StockControllerTests.cs:line 25

Если я перезапущуНабор тестов Я получу сбои в различных ранее пройденных тестах, а ранее пройденные тесты пройдут.Также, если я перезапущу отдельные тесты, которые не пройдены, они также пройдут.

Одна вещь, которую я заметил, - каждая трассировка стека включает в себя вызов AddAutoMapperClasses.Я немного погуглил об этой ошибке и AutoMapper, но ничего не нашел.

Мой вопрос прост: кто-нибудь видел эту ошибку или какие-либо идеи о том, что может быть ее причиной?

1 Ответ

0 голосов
/ 11 декабря 2018

Похоже, что он падает из-за множественной параллельной инициализации Automapper.Я решил эту проблему с помощью жесткой грубой силы xUnit:

using Xunit;

[assembly: CollectionBehavior(DisableTestParallelization = true)]

Просто поместите ее в любое место исходных файлов проекта, чтобы предотвратить параллельный запуск теста.

...