sulmar / altkom-netcore6-202210

Przykłady ze szkolenia Wprowadzenie do ASP.NET Core 6
1 stars 2 forks source link

Czy jest analogiczna biblioteka Microsoft.AspNetCore.Mvc.Testing do MVC Web Api w .NET Framework 4.x? #5

Closed sulmar closed 2 years ago

sulmar commented 2 years ago

W .NET Framework nie ma takiej paczki. Aby przeprowadzić testy integracyjne na podobnej zasadzie musimy dostosować nasz projekt do self-hostingu.

  1. Dodajemy paczkę Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

  2. Tworzymy przykładowy kontroler

using System.Web.Http;
namespace Controllers
{
    public class ValuesController : ApiController
    {
        // GET api/values/5 
        public string Get(int id)
        {
            return "value";
        }
    }
}
  1. Tworzymy klasę Startup
using Owin;
using System.Web.Http;
namespace OwinSelfhostSample
{
    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            appBuilder.UseWebApi(config);
            config.MapHttpAttributeRoutes();
            config.EnsureInitialized();
        }
    }
}
  1. Tworzymy test
    [TestClass]
    public class UnitTest
    {
        [TestMethod]
        public async Task TestMethod()
        {
            // Arrange
           var baseAddress = "https://localhost:44365/";
           var endpoint = "api/values/1";

            WebApp.Start<Startup>(url: baseAddress);

            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(baseAddress);

            // Act
            var response = await client.GetAsync(endpoint);

            // Assert
            Assert.IsTrue(response.IsSuccessStatusCode);
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

        }
    }