【问题标题】:Writing Unit Tests with ODataQueryOptions使用 ODataQueryOptions 编写单元测试
【发布时间】:2014-07-25 13:35:31
【问题描述】:

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

public IQueryable<Item> GetByIdAndLocale(ODataQueryOptions opts, 
                                         Guid actionuniqueid, 
                                         string actionsecondaryid)

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

【问题讨论】:

    标签: unit-testing asp.net-web-api odata moq


    【解决方案1】:

    对于 ODataQueryOptions 角度,您可能想要测试所有 OData 查询选项是否可以与您的函数一起使用。所以首先你需要创建一个 ODataQueryOptions 的实例。这是一个例子:

    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri);
    ODataQueryContext context = new ODataQueryContext(EdmCoreModel.Instance, elementType);
    ODataQueryOptions options = new ODataQueryOptions(context, request);
    

    因此,您需要创建自己的 EDM 模型来替换 EdmCoreModel.Instance,并将 requestUri 替换为您的查询。 ODataQueryContext 中的 elemntType 是“被查询的集合元素的 CLR 类型”。

    【讨论】:

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

    我无法从措辞中看出,但上述调用 (GetByIdAndLocale) 是您尝试测试的 Web API 还是您尝试测试调用它的东西?

    使用模拟或存根来替换被测单元 (UUT) 中的依赖项。如果您正在测试 GetByIdAndLocale(),那么您不会模拟它,但如果它调用其他将 ODataQueryOptions 作为参数的东西,您可以使用 Moq 来存根/模拟 打电话。

    如果您正在测试一些调用 GetByIdAndLocale() 的单元,那么,是的,您可以起订量。您可以如何准确地执行此操作取决于目标(检查是否传递了正确的值与检查返回的 IQueryable 是否被正确处理)基本上,与 It.IsAny() 或某个匹配器匹配。

    你想测试哪个?
    GetByIdAndLocale(),调用它的东西还是它调用的东西(未显示)?

    您对验证什么感兴趣?
    是否传入了正确的选项或模拟调用的返回处理?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多