Nano Hash - криптовалюты, майнинг, программирование

Получите услугу от WebApplicationFactory‹T› в интеграционных тестах ASP.NET Core

Я хочу настроить свои тесты с помощью WebApplicationFactory<T>, как описано в Интеграционные тесты в ASP.NET Core.

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

Я мог бы получить услугу от factory.Server, используя factory.Host.Services.GetRequiredService<ITheType>();, за исключением того, что factory.Server имеет значение null, пока не будет вызван factory.CreateClient();.

Есть ли способ, которым мне не хватает, чтобы получить услугу с помощью фабрики?

Спасибо.


  • Разве стартап, используемый для теста, не сможет зарегистрироваться и использовать сервис? Покажите, что у вас есть на данный момент в том, что вы пытаетесь сделать 10.10.2018
  • Или вы можете настроить фабрику docs.microsoft.com/en-gb/aspnet/core/test/ 10.10.2018
  • Спасибо @Nkosi. Мне нужно получить сервис, зарегистрированный в реальном Startup, а не в тестовом Startup. Я хочу запустить тест с использованием полностью настроенного приложения, поэтому мне нужно получить реальную услугу, вызвать пару методов для настройки некоторых данных, а затем запустить тестовый сценарий. Мне нужно иметь возможность получить эту услугу в каждом тесте. 10.10.2018
  • создать тестовый запуск, который наследуется от реального запуска. переопределить configureservices, вызвать базу, построить провайдера, получить услугу и выполнить настройку 10.10.2018
  • Если я увижу какой-нибудь код, я, вероятно, смогу дать более подробное объяснение. 10.10.2018
  • Хорошо, большое спасибо @Nkosi, я создам минимальный пример. 10.10.2018
  • Спасибо за ваше предложение @Nkosi. Приносим извинения за то, что не предоставили вам пример. 18.01.2019
  • Без проблем. Рад видеть, что у вас есть решение. 18.01.2019

Ответы:


1

Вам необходимо создать область от поставщика услуг, чтобы получить необходимую услугу:

using (var scope = AppFactory.Server.Host.Services.CreateScope())
{
    var context = scope.ServiceProvider.GetRequiredService<MyDatabaseContext>();
}
18.01.2019
  • если factory.Server равно null, рассмотрите возможность вызова factory.CreateClient() в первую очередь! 15.05.2019

  • 2

    Пожалуйста, извините меня. Я знаю, что вы просите Net Core 2.1, но начиная с версии 3.1+ сюда приходят люди...

    В моем проекте используется Net Core 3.1. Когда я использую AppFactory.Server.Host.Services.CreateScope() как предложение Алексея Старчикова, я сталкиваюсь с этой ошибкой.

    The TestServer constructor was not called with a IWebHostBuilder so IWebHost is not available.
    

    Отмечено здесь, по дизайну.

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

    using (var scope = this.factory.Services.CreateScope())
    {
        var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>();
    
        // Seeding ...
    
        dbContext.SaveChanges();
    }
    
    07.04.2020
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..