在我的BaseApiController类中有以下方法:
public virtual HttpResponseMessage GetById(int id)
{
var entity = repository.GetById(id);
if (entity == null)
{
var message = string.Format("No {0} with ID = {1}", GenericTypeName, id);
return ErrorMsg(HttpStatusCode.NotFound, message);
}
return Request.CreateResponse(HttpStatusCode.OK, SingleResult.Create(repository.Table.Where(t => t.ID == id)));
}我将SingleResult用于OData请求(因为如果不创建SingleResult,则单个实体的$expand无法工作)。
但是现在我对这种方法在具体控制器上的UnitTests (例如AddressApiController)有问题。我总是得到NULL的结果:
[TestMethod]
public void Get_By_Id()
{
//Arrange
var moq = CreateMockRepository();
var controller = new AddressApiController(moq);
controller.Request = new HttpRequestMessage()
controller.Request.SetConfiguration(new HttpConfiguration())
// Action
HttpResponseMessage response = controller.GetById(1);
var result = response.Content.ReadAsAsync<T>().Result;
// Accert
Assert.IsNotNull(result);
} 我检查并调试了GetById(),并发现repository.Table.Where(t => t.ID == id))返回适当的值,但是在SingleResult.Create之后,我得到了NULL。
我该如何解决这个问题?如何从SingleResult读取内容或使用其他内容?
发布于 2016-05-26 23:50:19
我创建了扩展:
public static class HttpResponseMessageExtensions
{
public static IQueryable<T> ContentToQueryable<T>(this HttpResponseMessage response) where T : BaseEntity
{
var objContent = response.Content as ObjectContent;
return objContent?.Value as IQueryable<T>;
}
public static T ContentToEntity<T>(this HttpResponseMessage response) where T : BaseEntity
{
var objContent = response.Content as ObjectContent;
return objContent?.Value as T;
}
}然后:
var result = response.ContentToEntity<T>();发布于 2015-11-02 19:57:58
我还没有机会模拟api,但这里的文档是这样的:
下面是方法签名的一些规则:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions
尝试将id更改为key和属性,这样您可能就不需要使用SingleResult了。
我想看看这是否改变了测试结果。
https://stackoverflow.com/questions/33279489
复制相似问题