使用 Moq 对工作单元和通用存储库模式框架进行单元测试

2024-02-14

我正在对一个服务进行单元测试,该服务使用工作单元和通用存储库,并使用起订量。问题是,当我在调试模式下运行测试时,在服务类中 _subsiteRepository 始终为 null。

我正在嘲笑的服务类的设置

private readonly IRepository<Subsite> _subsiteRepository;

public PlatformService(IUnitOfWork<PlatformContext> unitOfWork)
{
    _subsiteRepository = unitOfWork.GetRepository<Subsite>();
}

以及这个类中正在测试的方法。问题是 _subsiteRepository 始终为空。该方法的作用远不止于此,但这是相关的部分。

public async Task<IEnumerable<Subsite>> GetSubsites()
{
    // Get Subsites
    var subsites = await _subsiteRepository
        .GetAll()
        .ToListAsync();
}

最后这是我正在运行的测试:

private readonly Mock<IRepository<Subsite>> _subsiteRepository;
private readonly Mock<IUnitOfWork<PlatformContext>> _unitOfWork;
private readonly PlatformService _platformService;

_subsiteRepository = new Mock<IRepository<Subsite>>();
_unitOfWork = new Mock<IUnitOfWork<PlatformContext>>();
_platformService = new PlatformService(_unitOfWork.Object);

// Arrange
var fakeSubsites = new List<Subsite>
{
    new Subsite {IDSubsite = new Guid(), Title = "Subsite One"}
}.AsQueryable();

_unitOfWork.Setup(x => x.GetRepository<Subsite>()).Returns(_subsiteRepository.Object);
_unitOfWork.Setup(x => x.GetRepository<Subsite>().GetAll()).Returns(fakeSubsites);

// Act
var subsites = await _platformService.GetSubsites(null, null);

// Assert
Assert.NotNull(subsites);

移动创建_platformService安排步骤后。因为你调用PlatformService之前的构造函数unitOfWork模拟已设置。

_subsiteRepository = new Mock<IRepository<Subsite>>();
_unitOfWork = new Mock<IUnitOfWork<PlatformContext>>();

// Arrange
var fakeSubsites = new List<Subsite>
{
    new Subsite {IDSubsite = new Guid(), Title = "Subsite One"}
}.AsQueryable();

_unitOfWork.Setup(x => x.GetRepository<Subsite>()).Returns(_subsiteRepository.Object);
_unitOfWork.Setup(x => x.GetRepository<Subsite>().GetAll()).Returns(fakeSubsites);

// Act
_platformService = new PlatformService(_unitOfWork.Object);
var subsites = await _platformService.GetSubsites(null, null);

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

使用 Moq 对工作单元和通用存储库模式框架进行单元测试 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 如何发送带有空格的 POST 请求?

    我正在尝试将编辑文本的输入发送到 PHP 如果我发送的内容没有空格 它可以正常工作 但如果有空格就会崩溃并显示以下内容 非法字符 指的是空间 显然 这是一个正确引用的问题 但由于某种原因 我就是无法正确引用 在哪里添加引号 创建 URL 时
  • 如何将 ModelState.AddModel Error 绑定到剔除动态创建的验证范围?

    我已经设置 Knockoutjs 使用以下代码动态创建可编辑的值列表 var requirementModel function var self this self requirementtypes ko observableArray
  • FastAPI:CORS 中间件不支持 GET 方法

    我尝试在 FastAPI 框架上使用 CORS 但它不适用于 GET 方法 这是我正在处理的代码 from fastapi import FastAPI from fastapi middleware cors import CORSMid
  • iPhone 垂直拨动开关

    我正在尝试为 iPhone 创建一个垂直切换开关控件 沿着 UISwitch 的路线 但垂直滑动 我想知道现有的控件是否已经存在 或者是否有任何好的教程来解释为 iPhone 创建自定义控件的基础知识 目前 我尝试使用仿射变换从基本 UIs
  • 连接MySQL服务器时Eclipse程序崩溃

    I am writing a simple program to connect to a MySQL Server hosted locally I have ensured the server is running The code
  • 如何以不依赖扩展的方式禁用 htaccess 中的 cgi?

    我想在文档根目录下的目录中禁用任何类型的 CGI 执行 任何类型 php perl ruby 等等 我想以一种不依赖于文件扩展名的方式来执行此操作 在我的文档根目录下 因为用户必须能够放置和查看 HTML 文件 它必须位于 htaccess
  • Azure 资源管理器模板链式函数

    我正在尝试删除 在分配给输出变量值之前使用 azure 函数从 URL 获取 webappStorageUri type string value take reference resourceId Microsoft Storage st
  • 对样式化媒体接收器 CSS 进行故障排除

    我正在尝试实现样式媒体接收器 但由于某种原因 我的 chromecast 不会显示图形 我只在黑色背景上看到我的接收者的名字 不过 在演员开发控制台中预览看起来还不错 我尝试使用的CSS是这样的 https krizan se styl l
  • 在变量中存储大量数字的正确方法

    我想玩弄数字 无论多么简单 我一直在编写斐波那契数列的算法和寻找素数的强力路径 我不是程序员 只是一个数学家 然而 我经常遇到的一个问题是 long long double 和 float 经常会出现空间不足的情况 如果我想继续在JAVA中
  • 在mysql中存储mp3文件

    我发现很多人建议不要将 mp3 文件存储为 blob 我没有得到明确的解释为什么会这样 我的网站流量较低 每分钟 10 次点击 到目前为止 我已将图像文件作为 blob 存储在数据库表中 我对图像表所做的唯一查找是基于单个主键 图像渲染速度
  • Open Feignclient 与 Netflix Ribbon 集成在 springboot 中不起作用

    Feing客户端服务器 RestController public class FeinApiCall Autowired CustomFeignClient customFeignClient GetMapping getinfothro
  • C 中的冲突类型

    我试图用 C 语言构建一个非常简单的程序 该程序从函数返回浮点值 但由于某种原因我收到了错误 include
  • 一般来说,在 ExtJS 应用程序上转义 HTML 的最佳方法是什么?

    我正在使用 ExtJS 开发一个 Web 应用程序来构建 GUI 并通过 RESTful Web 服务与服务器通信 返回的数据格式化为 JSON 对象 现在我在处理包含 HTML 标签 Javascript 代码的数据时遇到问题 因为当我将
  • 使用 ffmpeg 在音频文件中的单词之间添加静音

    我想做的是concat wav包含短音频的文件 我能够concat它们放入一个文件中 但我试图在特定时间设置每个文件 目前 我可以concat这些文件 但我无法将每个文件放置在需要的特定时间 我想也许我可以在他们之间添加适当的沉默 这样就可
  • 在多个存储库上重用 Github Actions 自托管运行器

    我有一个自托管的 Github Actions 运行器在我的服务器上运行 用于我的 1 个存储库 但现在我想将同一个运行程序用于另一个存储库 有没有一种方法可以让我将同一个 Github Actions 运行器重复用于其他存储库 而无需创建
  • 有没有办法在 Ruby 中全局目录但排除某些目录?

    我想全局一个目录来后处理头文件 但我想排除项目中的一些目录 现在默认的方式是 Dir h each header puts header 如果每个标头条目位于排除目录中 则手动检查它似乎效率低下 我知道这已经晚了 4 年 但对于可能遇到这个
  • 多租户:使用 Spring Data JPA 管理多个数据源

    我需要创建一个可以管理多个数据源的服务 当应用程序首次运行应用程序时 这些数据源不一定存在 实际上端点将创建新的数据库 我希望能够切换到它们并创建数据 例如 假设我有 3 个数据库 A B 和 C 然后我启动应用程序 我使用创建 D 的端点
  • Electron 应用程序:无法加载预加载脚本

    每次我启动电子应用程序时都会遇到此错误 electron js2c renderer init js 91 Unable to load preload script C Users Desktop Projects Electron Ap
  • ng-repeat过滤器空值不显示

    为什么当我应用时角度不会显示为空的值 ng repeat p in foo filter filter2 其中过滤器2是 scope filter2 function p if p state null return p state els
  • 使用 Moq 对工作单元和通用存储库模式框架进行单元测试

    我正在对一个服务进行单元测试 该服务使用工作单元和通用存储库 并使用起订量 问题是 当我在调试模式下运行测试时 在服务类中 subsiteRepository 始终为 null 我正在嘲笑的服务类的设置 private readonly I