使用ODataQueryOptions编写单元测试

Gre*_*g P 3 unit-testing moq odata asp.net-web-api

我是为WebAPI编写测试用例的新手。我曾经看过类似的问题,但没有得到回答,但是我想知道如果我的API ODataQueryOptions作为参数的一部分,我将如何测试它们。见下文:

public IQueryable<Item> GetByIdAndLocale(ODataQueryOptions opts, 
                                         Guid actionuniqueid, 
                                         string actionsecondaryid)
Run Code Online (Sandbox Code Playgroud)

我需要起订吗?如果是这样,看起来会如何?任何帮助,将不胜感激。

小智 5

对于ODataQueryOptions透视图,您可能需要测试所有OData查询选项是否可以与Function一起使用。因此,首先您需要创建一个ODataQueryOptions实例。这是一个例子:

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri);
ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, elementType);
ODataQueryOptions options = new ODataQueryOptions(context, request);
Run Code Online (Sandbox Code Playgroud)

因此,您需要创建自己的EDM模型来替换EdmCoreModel.Instance,并用查询替换requestUriODataQueryContext中的elemntType是“正在查询的集合的元素的CLR类型”。

  • 从 Microsoft.AspNet.OData 的 6.0 版开始,这不再有效并且将引发异常。为了解决这个问题,你需要添加以下内容来实例化 HttpRequestMessage 稍微更健壮:```HttpConfiguration configuration = request.GetConfiguration(); if (configuration == null) { configuration = new HttpConfiguration(); request.SetConfiguration(配置); } configuration.EnableDependencyInjection((Action&lt;IContainerBuilder&gt;)null);``` 您还需要将其添加到顶部以访问该扩展方法:```using System.Web.OData.Extensions;``` (2认同)