为 .NET 5 Core 控制器单元测试模拟或创建实用的 ODataQueryOptions

2023-12-03

我正在将现有的 API 迁移到 .net 5,并且面临单元测试迁移的问题。 我想保留测试和测试控制器,但我找不到处理 ODataQueryOptions 的方法,因为此类已更改,我无法再找到创建 ODataQueryOptions 的方法。 与我的问题相关的所有主题都已过时。

这是迁移前如何测试控制器的旧代码

_userController.Request = new HttpRequestMessage(HttpMethod.Get, new Uri("http://localhost/api?$orderby=UserName desc"));
            _queryOptionsUser = new ODataQueryOptions<User>(_queryOptionsUser.Context, _userController.Request);
            PageResult<UserDto> users = _userController.GetUsers(Constants.ValidOrgCode1, _queryOptionsUser);

如果有人可以向狙击手提供如何处理类似问题并能够测试控制器的信息,我将非常感激。


最后,我结束了这件事。

有控制器进行单元测试的方法

public PageResult<User> GetAll(ODataQueryOptions<User> odataQuery) 

单元测试

// Arrange
var modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<User>("User");
var edmModel = modelBuilder.GetEdmModel();

const string routeName = "odata";
IEdmEntitySet entitySet = edmModel.EntityContainer.FindEntitySet("User");
ODataPath path = new ODataPath(new EntitySetSegment(entitySet));

var request = RequestFactory.Create("GET",
    "http://localhost/api?$top=10&",
    dataOptions => dataOptions.AddModel(routeName, edmModel));

request.ODataFeature().Model = edmModel;
request.ODataFeature().Path = path;
request.ODataFeature().PrefixName = routeName;

var oDataQueryContext = new ODataQueryContext(edmModel, typeof(User), new ODataPath());
var aDataQueryOptions = new ODataQueryOptions<User>(oDataQueryContext, request);

// Act
PageResult<User> users = _userController.GetAll(aDataQueryOptions);

您将需要辅助类来生成 HttpRequest

public static class RequestFactory
    {
        /// <summary>
        /// Creates the <see cref="HttpRequest"/> with OData configuration.
        /// </summary>
        /// <param name="method">The http method.</param>
        /// <param name="uri">The http request uri.</param>
        /// <param name="setupAction"></param>
        /// <returns>The HttpRequest.</returns>
        public static HttpRequest Create(string method, string uri, Action<ODataOptions> setupAction)
        {
            HttpContext context = new DefaultHttpContext();
            HttpRequest request = context.Request;

            IServiceCollection services = new ServiceCollection();
            services.Configure(setupAction);
            context.RequestServices = services.BuildServiceProvider();

            request.Method = method;
            var requestUri = new Uri(uri);
            request.Scheme = requestUri.Scheme;
            request.Host = requestUri.IsDefaultPort ? new HostString(requestUri.Host) : new HostString(requestUri.Host, requestUri.Port);
            request.QueryString = new QueryString(requestUri.Query);
            request.Path = new PathString(requestUri.AbsolutePath);
            
            return request;
        }

它是从这里拿走的https://github.com/OData/AspNetCoreOData/blob/master/test/Microsoft.AspNetCore.OData.Tests/Extensions/RequestFactory.cs

我希望它能帮助其他面临同样问题的人

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 .NET 5 Core 控制器单元测试模拟或创建实用的 ODataQueryOptions 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • Netlogo 发芽的海龟间隔不到一处

    我想将海龟放置在每个黑色斑块上 下图 这样海龟之间就没有间隙 我现在使用的代码 ask patches with pcolor black sprout dead turtles wall agents set color red 这给出了
  • 使用分治法求一个数的n次方根

    我需要有关如何求某个数字的 n 次方根的帮助 用户输入数字 n 和他想要根的数字 我需要在没有 cmath lib 的情况下使用分而治之的方法来解决这个问题 这是我的代码 目前还无法运行 include
  • 如何从C#调用Java代码?

    我们开发了一个 Java 应用程序 并希望从 C 客户端使用该应用程序 该应用程序依赖于 Spring Log4j 最有效的机制是什么 从 Java 代码创建 DLL 来实现这一目标 IKVM 真是太棒了 唯一的问题是它确实为项目增加了约
  • ScrollViewer 不滚动

    我想要一个包含 3 个组件的界面 一个挨着一个 第一个是 ListView 另外两个是 Grid 由于组件会在右侧溢出 因此我想将它们放在 ScrollViewer 中 我没有成功 我尝试做一个非常简单的例子来尝试 但即使这个例子也失败了
  • 是 printf("%d %d", c++, c); 的输出结果也未定义?

    最近看到一个帖子cout 并想知道是否输出 int c 0 printf d d c c 也是未定义的 我在讲座中研究过后缀和前缀运算符仅在获得分号后才增加值 所以根据我的说法 输出0 0是正确的 我在讲座中研究过后缀和前缀运算符仅在获得分
  • codeigniter 中的浏览器缓存问题

    我是代码点火器的新手 我创建了一个登录表单和一个注销部分 当我按下注销部分时 页面将重定向到登录部分 当我单击浏览器中的后退按钮时 它将显示以前的页面 当我单击清除最近历史记录和选择缓存 然后按后退按钮时 它不会显示最近的页面 它只显示登录
  • Glassfish 上的 Spring Boot

    我在 Spring Boot 部署到 GF3 4 期间得到了这个 虽然这是知道问题看到 弹簧启动问题 another 除了 GF 源代码中的 try catch 破解之外 没有其他解决方案 整个问题是关于 Conditional Sprin
  • Java拖放自定义光标

    我使用 JPanel 定义了一个自定义画布样式组件 它将支持将对象拖动到画布上 我似乎无法弄清楚如何使用 TransferHandler 将拖放 DnD 光标更改为自定义光标 例如 我想用我自己的代替 DnD 期间的默认链接光标 有没有办法
  • XCode 4.2.1 上的临时分发 - 权利

    我正在尝试构建我的应用程序以进行临时分发 在 TestFlight 上 我已阅读所有说明并进行了大量网络搜索 我的问题是如何在 Xcode 4 2 1 上创建 entitlements plist 所有说明均表示转到 新建文件 然后在代码签
  • 使用动作监听器获取 JButton 的文本

    有没有理由getText导致error cannot find symbol在代码中显示的动作侦听器内 另外 如果有 我该如何修复这个错误 class openNewPaneActionListener implements ActionL
  • jquery中仅选择第一级元素

    如何仅选择父级的链接元素 ul 从这样的列表中 ul li a href Link a li li a href Link a ul li a href Link a li li a href Link a li li a href Lin
  • 重写实例上的特殊方法

    考虑以下代码 gt gt gt class A object pass gt gt gt def repr self return A gt gt gt from types import MethodType gt gt gt a A g
  • wp_get_attachment_url() 中不带域名的文件路径

    wp get attachment url 处理完整文件路径 例如 http example com wp content uploads 2014 12 aura mp3 我想要没有的网址http example com 所以 我想要上面
  • 在外部库协议中添加和使用新方法时发出警告

    我正在使用外部库 并且我的视图控制器之一正在注册为该框架中的类的委托 现在 在一个地方我想在这个委托类上执行一些代码 我正在为此编写一个方法并在我的委托上调用它 现在 一切正常 但我收到一条警告 称这个新添加的方法不是协议的一部分 这是我的
  • 正则表达式仅允许 1 个字符

    rex lt gt i 我在使用这个正则表达式时遇到了问题 这个想法是检查输入字段中是否存在某些字符 如果存在 则抛出错误 对于每个长度超过 1 个字符的字符串 此正则表达式会引发错误 谁能告诉我我做错了什么 编辑 人们说他们不明白我想用这
  • ruby:批量初始化实例变量

    有没有一种简单的方法来批量分配实例变量 def initialize title nil label left nil label right nil color set nil title title label left label l
  • 为什么在初始化 Spring 时会出现 NullPointerException

    我在服务器上运行批处理作业时遇到问题 而它在我的开发工作站上的 Eclipse 中运行良好 我已经使用 Roo 设置了 Spring 环境 创建了一个实体 并制作了一个可以完成一些工作的批处理 并在我的开发盒上对其进行了良好的测试 我初始化
  • 如何在 Firemonkey 中使用动画 gif?

    如何在 Firemonky 中使用动画 GIF 我可以使用 Timage 加载 gif 但它不是动画 我正在使用 Delphi 10 2 东京 也许有点晚了 但在此页面上找到了一个简单的解决方案 http www raysoftware c
  • Python 将空格分隔的文件行读取为单独的行

    这是在 Windows Server 2008 R2 上 我有一个输入文件 每行一个输入 一些输入中包含空格 我尝试使用下面的简单代码 但它分离出每个单词而不是每行 我最终应该有 208 个新文件夹 删除所有空格 但因此我最终得到 230
  • 为 .NET 5 Core 控制器单元测试模拟或创建实用的 ODataQueryOptions

    我正在将现有的 API 迁移到 net 5 并且面临单元测试迁移的问题 我想保留测试和测试控制器 但我找不到处理 ODataQueryOptions 的方法 因为此类已更改 我无法再找到创建 ODataQueryOptions 的方法 与我