Почему TestServer не может найти контроллеры, когда контроллер находится в отдельной сборке для основного приложения asp.net?
По какой-то причине, когда основные контроллеры ASP.NET создаются в отдельной сборке, TestServer не может найти действия контроллера, когда клиент делает запрос. (Приводит к ответу 404) Почему это так? Как я могу обойти это? Вот шаги, чтобы воспроизвести.
- Создание нового ASP.NET Core WebAPI с использованием .NET core
- Создайте интеграционные тесты в отдельном проекте и настройте тест для использования клиента TestServer() и получите тесты для успешной работы.
- Теперь разделите контроллер на его собственную совместно используемую библиотеку и проект рефакторинга, созданный на шаге 1, чтобы вместо этого использовать эту совместно используемую библиотеку.
- Перезапустите тест, который содержит класс TestServer(). Вы заметите, теперь это не удается.
Смотрите следующую ссылку для создания интеграционных тестов. Интеграционное тестирование с ASP.NET Core
Ответы
Ответ 1
На самом деле я нашел решение на данный момент, см. Diff ниже:
Похоже, что это может быть ошибкой класса TestServer() и того, как оно размещает приложение во время тестового запуска.
Вот строка кода на случай, если вы не можете прочитать выше на изображении
.AddApplicationPart(Assembly.Load(new AssemblyName("WebApiToReproduceBug.Controllers")));
Ответ 2
В дополнение к ответу Джои: нет необходимости вызывать Assembly.Load() для устранения этой ошибки. Вы можете использовать код ниже. ServiceHookController
- это класс из отдельного проекта.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddApplicationPart(typeof(ServiceHookController).Assembly);
}
Ответ 3
Если вы выполняете предварительные требования из документации MS, контроллеры из отдельных сборок загружаются.
В моем случае добавление Microsoft.AspNetCore.Mvc.Testing пакета NuGet AddApplicationPart
проблему, и мне больше не нужно вызывать AddApplicationPart
.