【发布时间】:2017-06-06 13:53:51
【问题描述】:
我在兜圈子。因此,当我在调试中运行时,我的 WebApi 将它需要的输出返回给浏览器。 Firefox 和 IE 显示我需要的列表。但是,当我尝试使用 Mock 和 Autofac 对响应进行单元测试时,HttpResponseMessage 我回来时没有内容。我觉得它正在返回不同的上下文或类似的东西。我不完全确定,因此提出这个问题。我通过谷歌搜索和 Autofac 文档将以下单元测试串在一起。
WebApiMethod(包含在InScrapController内,_WebScrapSprocService由Autofac在构造函数中注入)
public HttpResponseMessage GetFormItemsByFormNumber(int FormNumber)
{
HttpResponseMessage response;
try
{
//response = Request.CreateResponse(HttpStatusCode.OK, _WebScrapSprocService.GetFormItemsByFormNumber(FormNumber),new MediaTypeHeaderValue("application/json"));
response = Request.CreateResponse(HttpStatusCode.OK, new MediaTypeHeaderValue("application/json"));
response.Content = new StringContent(JsonConvert.SerializeObject(_WebScrapSprocService.GetFormItemsByFormNumber(FormNumber)),Encoding.UTF8, "application/json");
} catch (Exception e)
{
response = Request.CreateResponse(HttpStatusCode.InternalServerError, new StringContent(e.Message), new MediaTypeHeaderValue("application/json"));
}
//Checking if bob knows anything about this...
string bob = response.Content.ReadAsStringAsync().Result;
return response;
}
单元测试
public void GetFormItemsByFormNumber()
{
using (var mock = AutoMock.GetLoose())
{
var Service = mock.Mock<IWebScrapSprocService>().Setup(x => x.GetFormItemsByFormNumber(3392));
var service = mock.Create<InScrapController>();
service.Request = new HttpRequestMessage();
service.Request.SetConfiguration(new HttpConfiguration());
var HttpResponse = service.Request.CreateResponse(HttpStatusCode.OK, Service, new MediaTypeHeaderValue("application/json"));
var response = service.GetFormItemsByFormNumber(3392);
mock.Mock<IWebScrapSprocService>().Verify(x => x.GetFormItemsByFormNumber(3392));
Assert.AreEqual(HttpResponse, response);
}
}
【问题讨论】:
标签: c# unit-testing asp.net-web-api moq autofac