gpt4 book ai didi

c# - 单一结果和单元测试

转载 作者:太空狗 更新时间:2023-10-29 19:47:47 24 4
gpt4 key购买 nike

我的 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)上使用此方法的单元测试时遇到问题。结果总是得到 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

  • 如果路径包含键,则 Action 应该有一个名为键的参数。
  • 如果路径包含导航属性中的键,则该操作应该有一个名为 relatedKey 的参数。
  • 使用 [FromODataUri] 参数修饰 key 和 relatedKey 参数。
  • POST 和 PUT 请求采用实体类型的参数。
  • PATCH 请求采用 Delta 类型的参数,其中 T 是实体类型。

我很想知道这是否会改变测试结果。

关于c# - 单一结果和单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com