웹 API 서비스를 테스트하기 위해 컴포넌트 테스트 프로젝트를 만들고 싶습니다. OWIN과 같은 솔루션을 호스팅하는 메모리에서 사용하고 싶습니다. 가능하다는 것을 알고 싶습니다. 또한 웹 API 프로젝트가 IIS로 실행하면 테스트 프로젝트 만 메모리에서 실행됩니까?웹 API가 iis에서 실행되는 동안 메모리 호스팅 프레임 워크에서 구성 요소 테스트 웹 API를 구성하는 방법은 무엇입니까?
메모리 호스팅 프레임 워크에는 어떤 것이 있습니까?
웹 API 서비스를 테스트하기 위해 컴포넌트 테스트 프로젝트를 만들고 싶습니다. OWIN과 같은 솔루션을 호스팅하는 메모리에서 사용하고 싶습니다. 가능하다는 것을 알고 싶습니다. 또한 웹 API 프로젝트가 IIS로 실행하면 테스트 프로젝트 만 메모리에서 실행됩니까?웹 API가 iis에서 실행되는 동안 메모리 호스팅 프레임 워크에서 구성 요소 테스트 웹 API를 구성하는 방법은 무엇입니까?
메모리 호스팅 프레임 워크에는 어떤 것이 있습니까?
실행중인 버전의 API에 대해 테스트 할 수 있도록 Owin을 사용하여 API를 자체 호스팅 할 수 있습니다. 그러나 API를 실제로 호스트 할 필요없이 유닛 테스트를 사용하여 컨트롤러 로직을 테스트 할 수 있어야합니다.
자체가 콘솔 응용 프로그램에서 호스팅 here를 설명 :
아직도, 단위 테스트에서 그들을 호스트 타당한 이유가있을 수 있습니다 그래서 여기 우리는 간다. 콘솔 응용 프로그램에서 실행할 수 있으면 단위 테스트 프로젝트에서도 실행할 수 있습니다.
using Microsoft.Owin.Hosting
using Owin
using System.Web.Http
using Microsoft.Owin.Cors
using System.Web.Http.Dispatcher
using System.Threading.Tasks
string service = "http://localhost:54321";
[TestMethod]
public async Task MyTest()
{
using (var webApp = WebApp.Start(service, BuildConfiguration))
{
var requestUrl = string.Format($"{service}/api/Foo/Bar");
var client = new HttpClient();
var response = await client.GetAsync(requestUrl);
Assert.IsTrue(response.IsSuccessStatusCode);
}
}
public void BuildConfiguration(IAppBuilder appBuilder)
{
var HttpConfiguration = new System.Web.Http.HttpConfiguration();
HttpConfiguration.Services.Replace(typeof(IAssembliesResolver), new AssembliesResolver());
HttpConfiguration.MapHttpAttributeRoutes();
HttpConfiguration.Routes.MapHttpRoute("DefaultApi",
$"api/{{controller}}/{{action}}/{{id}}", new { id = RouteParameter.Optional });
appBuilder.UseCors(CorsOptions.AllowAll);
appBuilder.UseWebApi(HttpConfiguration);
HttpConfiguration.EnsureInitialized();
}
[RoutePrefix("api/Foo")]
public class FooController : ApiController
{
[HttpGet]
[Route("Bar")]
public string GetBar()
{
return "Hello World";
}
}
public class AssembliesResolver : DefaultAssembliesResolver
{
private List<Assembly> assemblies;
public override ICollection<Assembly> GetAssemblies()
{
assemblies = new List<Assembly> { GetType().Assembly };
return assemblies;
}
}
지금, 당신의 컨트롤러는 아마 테스트 어셈블리보다 다른 어셈블리에 살고 테스트 : 예 (의사 코드) 될 수 있습니다. 유닛 테스트 프로젝트를 위해 어셈블리 리졸버를 사용하여 API를 발견해야 할 수도 있습니다. 내 답변에 표시된대로 자신의 AssembliesResolver를 작성할 수 있습니다.
알아 두십시오. 설정에 따라 테스트 환경이 실제 시나리오와 일치하는지 확인해야합니다. IIS와 자체 호스팅 웹 API간에 미묘한 차이가있을 수 있습니다. 메모리 호스팅 환경을 설정하는 데 필요한 여러 매개 변수가있을 때
빠른 답변 감사드립니다. –
@ ReaB.,이 답변이 도움이 될 경우 [표시하십시오] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)를 입력하십시오. –
@BrockAdams 감사합니다. –