Загрузка ссылочных сборок из проекта. net core Integration Test не включает проекты, на которые есть ссылки из протестированного API - PullRequest
0 голосов
/ 21 июня 2020

Я создал проект интеграционного тестирования, в котором есть ссылка на встроенный проект Rest API. Net Core 3.1

При запуске моего Rest Api я немного размышляю, чтобы загрузить некоторые классы, закодированные для других сборки, которые у меня есть (например, плагины, которые я загружаю динамически), но я делаю некоторые открытия с помощью отражения. Я не указываю путь к сборкам, я просто добавляю их в качестве ссылки в свой проект Rest Api и загружаю их таким образом

var assemblies = Assembly.GetEntryAssembly()?.GetReferencedAssemblies().Select(Assembly.Load);

Теперь, когда я запускаю свой проект интеграционного тестирования, это не так. т работать. В моем тестовом проекте интеграции есть ссылка на мой проект Rest API, а также я использую подход

IClassFixture

, который запускает запуск моего проекта Rest Api перед выполнением теста, но контекст выполнения (основной поток) в этом случае - это тестовый проект. Когда запуск моего Rest Api выполняется из основного потока Integration Test, никакие ссылочные сборки не загружаются.

Основная проблема заключается в том, что в моем тестовом проекте не было тех же ссылок, что и в моем проекте Rest Api, поэтому Я добавляю их вместе с частью тестового проекта интеграции.

это не сработало

Кроме того, я попытался создать фиктивные объекты, определенные в этих сборках, и использовать их внутри моего тестового проекта интеграции. Если вы не создаете фиктивный объект, компилятор не увидит, что вы используете какие-либо определения / классы из одной из этих сборок, и не включит их в список ReferenceAssemblies. См. Идею ниже

 private void CreateDummiesObject()
    {
        //To make the discovery process happen on assemblies that are referenced but not used until the runtime 
        //Core project
        TypeHelper th = null;
        //Data
        Repository<Summary> rep = null;
        //Data.Web.Api1
        WebApi1DbContext dbContext = null;
    }

это не сработало

Есть идеи, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 01 июля 2020

Я задаю тот же вопрос. Net core Github

Благодаря javiercn ответ очень простой, передайте имя приложения напрямую

Assembly.Load(hostEnvironment.ApplicationName).GetReferencedAssemblies().Select(Assembly.Load)

и заработало !!!

...