Я настроил базовый проект веб-API для тестирования написания интеграционных тестов со следующей настройкой
Запуск:
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(WebApiTest.Startup))]
namespace WebApiTest
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
WebApiConfig.Register(new System.Web.Http.HttpConfiguration());
}
}
}
И следующий контроллер:
using System.Web.Http;
namespace WebApiTest.Controllers
{
public class TestController : ApiController
{
public IHttpActionResult Post()
{
return Ok("Hello, world!");
}
}
}
Для моего проекта «Тесты» я использую NUnit
для своего тестирования и имею два класса: абстрактный класс BaseTest
и класс ControllerTests
, который содержит один тест с целью отправки веб-запроса на выше TestController
х GET
Метод действия:
BaseTest:
using Microsoft.Owin.Testing;
using NUnit.Framework;
using System;
using System.Net.Http;
namespace WebApiTest.Tests
{
public abstract class BaseTest : IDisposable
{
protected const string _url = "http://localhost/";
protected TestServer _server;
public void Dispose()
{
_server.Dispose();
}
[SetUp]
public void SetUp()
{
_server = TestServer.Create<Startup>();
}
protected HttpRequestMessage CreateRequest(string url, string
contentType, HttpMethod method)
{
HttpRequestMessage request = new HttpRequestMessage
{
RequestUri = new Uri(_url + url),
Method = method
};
request.Headers.Accept.Add(new
System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(contentType));
return request;
}
}
}
ControllerTests:
using FluentAssertions;
using NUnit.Framework;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
namespace WebApiTest.Tests
{
[TestFixture]
public class ControllerTests : BaseTest
{
[Test]
public async Task Test1()
{
HttpRequestMessage request = CreateRequest("test", "application/json", HttpMethod.Post);
HttpResponseMessage response = await _server.HttpClient.SendAsync(request);
response.StatusCode.Should().Be(HttpStatusCode.OK);
}
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу достичь своей конечной точки с помощью вызова await _server.HttpClient.SendAsync(request);
, поскольку я всегда получаю ответ 404: Not Found
.
Я не совсем уверен, что я делаю не так, будь то что-то, что не является свойством setup, или маршруты Api, которые не отображаются.
обновление : вот мой WebApiConfig.Register()
метод для справки:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}