gpt4 book ai didi

asp.net-web-api - 在 ASP.NET Web API Controller 的 nunit 测试中实例化新的 System.Web.Http.OData.Query.ODataQueryOptions

转载 作者:行者123 更新时间:2023-12-02 14:33:10 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC4 Web API 项目,其中包含 ApiController 继承 Controller ,该 Controller 接受 ODataQueryOptions 参数作为其输入之一。

我正在使用 NUnit 和 Moq 来测试该项目,这使我能够从 ApiController 使用的相关存储库方法设置预设响应。这有效,如:

[TestFixture]
public class ProjectControllerTests
{
[Test]
public async Task GetById()
{
var repo = new Mock<IManagementQuery>();

repo.Setup(a => a.GetProjectById(2)).Returns(Task.FromResult<Project>(new Project()
{
ProjectID = 2, ProjectName = "Test project", ProjectClient = 3
}));

var controller = new ProjectController(repo.Object);
var response = await controller.Get(2);

Assert.AreEqual(response.id, 2);
Assert.AreEqual(response.name, "Test project");
Assert.AreEqual(response.clientId, 3);
}
}

我面临的挑战是,要使用此模式,我需要将相关的查询字符串参数传递给 Controller ​​以及存储库(这实际上是我的意图)。然而,在 ODataQueryOptions 接受 ApiController 方法的情况下,即使我只想使用 ODataQueryOptions 的默认参数,我也需要知道如何实例化一个方法。这变得很棘手:

  • ODataQueryOptions 没有实现接口(interface),因此我无法直接模拟它。
  • 构造函数需要 System.Web.Http.OData.ODataQueryContext 的实现,而 System.Web.Http.OData.ODataQueryContext 需要实现 Microsoft.Data.Edm.IEdmModel 的某些实现,该类的文档很少,并且 Visual Studio 2012 查找引用和查看调用层次结构不提供洞察力(什么实现了该接口(interface)?)。

我需要做什么/有更好的方法吗?

谢谢。

最佳答案

看起来其他人已经在评论中回答了这个问题 here ,但这不是我的用例的完整解决方案(请参阅下面的评论):

ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); 
modelBuilder.EntitySet<Customer>("Customers");
var opts = new ODataQueryOptions<Customer>(new ODataQueryContext(modelBuilder.GetEdmModel(),typeof(Customer)), request);

关于asp.net-web-api - 在 ASP.NET Web API Controller 的 nunit 测试中实例化新的 System.Web.Http.OData.Query.ODataQueryOptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477421/

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