При попытке блока проверить мой веб-апи проект я получаю ошибкуWeb API Nunit Тесты не инъекционные зависимостей
{[сообщение, произошла ошибка.]} ExceptionMessage, произошла ошибка при попытке создайте контроллер типа «ExampleController». Удостоверьтесь, что контроллер имеет безкоммертный публичный конструктор. {[ExceptionType, System.InvalidOperationException]} {[StackTrace, в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage запрос, HttpControllerDescriptor controllerDescriptor, Тип controllerType) в System.Web.Http.Controllers.HttpControllerDescriptor.CreateController (HttpRequestMessage запрос) на System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()]} {[InnerException, System.Web.Http.HttpError]}
Единица испытания:
[TestFixtureSetUp]
public void TestsSetup()
{
_server = HttpRequestHelper.SetupHttpServerDefault();
}
[Test]
public void CanGetAllAddresses()
{
var client = new HttpClient(_server);
var request = HttpRequestHelper.CreateRequest("memory/address", HttpMethod.Get, ConfigurationManager.AppSettings["KeyUser"], string.Empty, ConfigurationManager.AppSettings["SecretUser"]);
using (HttpResponseMessage response = client.SendAsync(request).Result)
{
Assert.NotNull(response.Content);
}
}
Я зарегистрировать мои контроллеры в пределах NUnit TestFixtureSetUp
функцию, которая включает в себя эту логику:
public static HttpServer SetupHttpServerDefault()
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "memory/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var container = new Container();
container.Register<IAddressService, AddressService>();
var services = GlobalConfiguration.Configuration.Services;
var controllerTypes = services.GetHttpControllerTypeResolver().
GetControllerTypes(services.GetAssembliesResolver());
foreach (var controllerType in controllerTypes)
{
var registration = Lifestyle.Transient.
CreateRegistration(controllerType, container);
container.AddRegistration(controllerType, registration);
registration.SuppressDiagnosticWarning
(DiagnosticType.DisposableTransientComponent, "");
}
container.Verify();
GlobalConfiguration.Configuration.DependencyResolver = new
SimpleInjectorWebApiDependencyResolver(container);
return new HttpServer(config);
}
Мой адрес контроллера начинается так:
public class AddressController : BaseController
{
private readonly IAddressService _addressService;
public AddressController(IAddressService addressService)
{
_addressService = addressService;
}
}
При удалении параметров контроллера я могу отлаживать в контроллер, который говорит мне, что я не правильно впрыскиваю зависимости в контроллер. Я просмотрел этот пост here, который кажется похожим, но я не знаком с тем, как я бы явным образом объявлял свои контроллеры. Я попытался использовать аналогичный метод для своих служб, но я не работал.
Просьба также показать тестовый код. – qujck
добавлен тестовый код @qujck. –
проблема связана с ссылкой на GlobalConfiguration и не делает все в переменной 'config', с которой вы создаете' HttpServer'? – qujck