我正在为我的ASP.Net Web应用程序编写集成测试,所以我想启动它并测试HTTP请求/响应级别。
因为测试应该以并发的最小权限同时运行,所以我不想在任何真正的HTTP端口上公开它们。
我读到OWIN声称是ASP.Net应用程序和Web服务器之间的接口。
我有一个想法是使用一些模拟Web服务器对象,它使用OWIN来托管ASP.Net应用程序,并且不会在任何HTTP端口公开它。 而不是这样,Web服务器对象应该通过调用其方法接受HTTP请求,将它们提供给它所托管的应用程序,并将响应转发给调用者。
现有解决方案吗?
答案 0 :(得分:1)
感谢dawidr我发现使用ASP.Net MVC / Web API的人有类似的方法 - Microsoft.Owin.Testing:
using (var server = TestServer.Create<Startup>())
server.HttpClient.GetAsync("api/ControllerName")
.Result.EnsureSuccessStatusCode();
通过这种方式,可以使用(并测试)Owin的Startup
对象,用于真正的托管场景。
答案 1 :(得分:1)
如果您使用的是.NET Core,那么我会在这里找到有用的信息:https://docs.asp.net/en/latest/testing/integration-testing.html
以下是如何配置测试服务器的示例:
public static void Main(string[] args)
{
var contentRoot = Directory.GetCurrentDirectory();
var config = new ConfigurationBuilder()
.SetBasePath(contentRoot)
.AddJsonFile("hosting.json", optional: true)
.Build();
//WebHostBuilder is required to build the server. We are configurion all of the properties on it
var hostBuilder = new WebHostBuilder()
//Server
.UseKestrel()
//URL's
.UseUrls("http://localhost:6000")
//Content root - in this example it will be our current directory
.UseContentRoot(contentRoot)
//Web root - by the default it's wwwroot but here is the place where you can change it
//.UseWebRoot("wwwroot")
//Startup
.UseStartup<Startup>()
//Environment
.UseEnvironment("Development")
//Configuration - here we are reading host settings form configuration, we can put some of the server
//setting into hosting.json file and read them from there
.UseConfiguration(config);
//Build the host
var host = hostBuilder.Build();
//Let's start listening for requests
host.Run();
}
如您所见,您可以重用现有的Startup.cs类。