Почему TestServer не может найти контроллеры, когда контроллер находится в отдельной сборке для основного приложения asp.net?

По какой-то причине, когда основные контроллеры ASP.NET создаются в отдельной сборке, TestServer не может найти действия контроллера, когда клиент делает запрос. (Приводит к ответу 404) Почему это так? Как я могу обойти это? Вот шаги, чтобы воспроизвести.

  1. Создание нового ASP.NET Core WebAPI с использованием .NET core
  2. Создайте интеграционные тесты в отдельном проекте и настройте тест для использования клиента TestServer() и получите тесты для успешной работы.
  3. Теперь разделите контроллер на его собственную совместно используемую библиотеку и проект рефакторинга, созданный на шаге 1, чтобы вместо этого использовать эту совместно используемую библиотеку.
  4. Перезапустите тест, который содержит класс TestServer(). Вы заметите, теперь это не удается.

Смотрите следующую ссылку для создания интеграционных тестов. Интеграционное тестирование с ASP.NET Core

Ответ 1

На самом деле я нашел решение на данный момент, см. Diff ниже: enter image description here

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

Вот строка кода на случай, если вы не можете прочитать выше на изображении

.AddApplicationPart(Assembly.Load(new AssemblyName("WebApiToReproduceBug.Controllers"))); 

Ответ 2

В дополнение к ответу Джои: нет необходимости вызывать Assembly.Load() для устранения этой ошибки. Вы можете использовать код ниже. ServiceHookController - это класс из отдельного проекта.


public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddApplicationPart(typeof(ServiceHookController).Assembly);
}