我的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)));
}
我对OData请求使用
SingleResult
(因为如果不创建SingleResult,则对单个实体的$expand
不起作用)。但是现在我在具体 Controller (例如AddressApiController)上对该方法的UnitTests遇到了问题。我总是得到
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读取内容或使用其他内容?
最佳答案
我还没有机会模拟一个api,但是来自这里的文档:
以下是方法签名的一些规则:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions
尝试将id
更改为key
和attribute,那么您可能不需要使用SingleResult
。
我很想看看这是否会改变测试结果。
关于c# - 单结果和单元测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33279489/