![](/img/trans.png)
[英]Integration testing ASP.NET Web API 2 using HttpServer/HttpClient; no HttpContext
[英]500 error when test MVC web API using httpclient and httpserver
我引用了这个 httpclient和httpserver来对我的MVC API进行集成测试,但是得到500错误,我可以确保我的操作没有内部错误,因为我可以在Fiddler期间成功请求。 我的代码作为引用程序非常简单,我将其粘贴在下面。 我没有足够的声誉来评论原始问题,因此在这里提出了新问题。
我的控制器动作
[HttpGet]
[Route("api/InjectDocuments/hello/")]
public IHttpActionResult Hello()
{
return Ok();
}
我的测试方法
[TestMethod]
public async Task InjectDocumentE2ETest()
{
var config = new HttpConfiguration();
//config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional });
WebApiConfig.Register(config);
using (var server = new HttpServer(config))
{
var client = new HttpClient(server);
// client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string url = "http://localhost/api/InjectDocuments/hello";
var request = new HttpRequestMessage
{
RequestUri = new Uri(url),
Method = HttpMethod.Get
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
using (var response = await client.SendAsync(request))
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
using (var response = await client.GetAsync(url))
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
}
您需要获取有关异常本身的更多信息。 您可以通过打破CLR抛出的每个异常来做到这一点。 为此,请检查调试> Windows>异常设置,然后打开“公共语言运行时异常”
现在,您的测试将以更有用的信息中断。
我的想法是“内存存储不支持事务处理。”
然后可以通过将其添加到内存数据库的配置中来抑制该错误.ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning))
有关该特定错误的更多信息,请检查https://github.com/aspnet/EntityFrameworkCore/issues/2866
但这绝对不是您遭受相同错误的原因。
您应该使用HttpClient
默认构造函数进行测试:
var client = new HttpClient();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.