伪造 Entity Framework 4.1 的 DbContext 来测试我的存储库

2023-12-09

我有一个基本存储库,所有实体存储库都继承自该存储库。

在我的睾丸中,我创建了一个 Fake DbContext 和 Fake DbSet 来测试我的存储库,但是在我的 FakeDbContext 中实现一些方法时,我无法实现IDbContext.Entry method:

public class FakeDbContext : IDbContext
{
    private IDbSet<Usuario> _usuario;
    private IDbSet<Atividade> _atividade;
    private IDbSet<Autor> _autor;
    private IDbSet<CategoriaModulo> _categoriaModulo;
    private IDbSet<CategoriaMateria> _categoriaMateria;
    private IDbSet<Site> _site;
    private IDbSet<Modulo> _modulo;
    private IDbSet<Perfil> _perfil;
    private IDbSet<CategoriaGaleriaImagem> _categoriaGaleriaImagem;

    public IDbSet<Usuario> Usuario { get { return _usuario ?? (_usuario = new FakeDbSet<Usuario>()); } set { } }
    public IDbSet<Atividade> Atividade { get { return _atividade ?? (_atividade = new FakeDbSet<Atividade>()); } set { } }
    public IDbSet<Autor> Autor { get { return _autor ?? (_autor = new FakeDbSet<Autor>()); } set { } }
    public IDbSet<CategoriaModulo> CategoriaModulo { get { return _categoriaModulo ?? (_categoriaModulo = new FakeDbSet<CategoriaModulo>()); } set { } }
    public IDbSet<CategoriaMateria> CategoriaMateria { get { return _categoriaMateria ?? (_categoriaMateria = new FakeDbSet<CategoriaMateria>()); } set { } }
    public IDbSet<Site> Site { get { return _site ?? (_site = new FakeDbSet<Site>()); } set { } }
    public IDbSet<Modulo> Modulo { get { return _modulo ?? (_modulo = new FakeDbSet<Modulo>()); } set { } }
    public IDbSet<Perfil> Perfil { get { return _perfil ?? (_perfil = new FakeDbSet<Perfil>()); } set { } }
    public IDbSet<CategoriaGaleriaImagem> CategoriaGaleriaImagem { get { return _categoriaGaleriaImagem ?? (_categoriaGaleriaImagem = new FakeDbSet<CategoriaGaleriaImagem>()); } set { } }

    public void SaveChanges()
    {
        //do nothing
    }

    public IDbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        foreach (PropertyInfo property in typeof(FakeDbContext).GetProperties())
        {
            if (property.PropertyType == typeof(IDbSet<TEntity>))
                return property.GetValue(this, null) as IDbSet<TEntity>;
        }
        throw new Exception("Type collection not found");
    }

    public System.Data.Entity.Infrastructure.DbEntityEntry Entry<TEntity>(TEntity entity) where TEntity : class
    {
    }
}

最后一个方法我无法实现,你们能帮我吗?

我正在使用此 Entry 方法来更新我的基础存储库中的实体:

public abstract class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : class
    {
        #region Fields

        protected TEntity EntityType;
        protected IDbSet<TEntity> DbSet;

        #endregion

        #region Properties

        public IDbContext DbContext
        {
            get
            {
                return DbContextFactory.Instance.GetOrCreateContext();
            }
        }

        #endregion

        #region Constructors

        protected BaseRepository()
        {
            this.EntityType = DependencyResolverFactory.Instance.Get<TEntity>();
            this.DbSet = DbContext.Set<TEntity>();
        }

        #endregion

        #region Methods

        public virtual void Add(TEntity entity)
        {
            this.DbSet.Add(entity);
        }

        public virtual void Remove(TEntity entity)
        {
            this.DbSet.Remove(entity);
        }

        public virtual void RemoveById(object id)
        {
            TEntity entity = this.GetById(id);
            this.DbSet.Remove(entity);
        }

        public virtual void Edit(TEntity entity)
        {
            this.DbContext.Entry(entity).State = EntityState.Modified;
        }

        public virtual TEntity GetById(object id)
        {
            return (TEntity)this.DbSet.Find(id);
        }

        public virtual IList<TEntity> GetAll()
        {
            return ((IEnumerable<TEntity>)this.DbSet).ToList();
        }

        #endregion
    }

Read this以及所有相关问题,然后再继续。对任何返回 EF 相关类或使用 linq-to-entities 进行单元测试都是危险的。

放弃对存储库进行单元测试,而是通过伪造存储库本身来对应用程序逻辑进行单元测试。如果您想测试您的存储库,请创建与真实数据库对话的集成测试。

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

伪造 Entity Framework 4.1 的 DbContext 来测试我的存储库 的相关文章

  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • ADO EF Code First 通用中间类继承映射

    我有以下要求 该要求在 OO 空间中运行良好 但我似乎无法首先使用 ADO EF 代码将其映射回数据库 我有许多产品 每个产品都有不同的方面 属性 但不是代码属性意义上的 例如 戒指将具有矿物类型 金等方面 而钻石将具有净度方面 VVSI1
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • .Net 4.0 应用程序在 64 位上比 32 位慢(分析和可能的解决方案)(应用程序正在使用 NetAdvantage)

    我们已经用 VB NET 4 0 VS2010 编写了 NET 应用程序 并使用设置为调试和发布配置的 AnyCPU 设置的所有项目进行编译 我们注意到 当此应用程序在 64 位环境中运行 在 Windows Server 2003 R2
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良

随机推荐

  • Ansible 循环 JSON 数组包含对象并替换文件中 JSON 中找到的每个元素

    我有这个 JSON foo1 somevalue1 foo2 somevalue2 zoo1 somevalue111 zoo2 somevalue222 其中我需要在 ansible 和 JSON 数组中的每个对象中循环每个键 对值 我喜
  • Java中的正则表达式匹配器\G(上一场比赛的结束)的例子会很好[重复]

    这个问题在这里已经有答案了 你有边界匹配器 G 的任何有用的例子吗 请给我一些现实世界的例子 Java 源代码值得赞赏 从 掌握正则表达式 Jeffrey E F Friedl 中 我得到了一个解析 HTML 的有用示例 但我不确定如何翻译
  • iOS 8 旋转方法弃用 - 向后兼容性

    在iOS 8中 界面旋转的方法有已弃用 这包括 willRotateToInterfaceOrientation duration didRotateFromInterfaceOrientation willAnimateRotationT
  • 使用 LINQ 从 XML 文件中选择元素

    我有这样的 XML 结构
  • Python:存储大数据结构

    我目前正在用 python 做一个项目 该项目使用相对较大的字典 大约 800 MB 我尝试使用 pickle 来存储其中一本字典 但出现了 MemoryError 在 python 中保存此类文件的正确方法是什么 我应该使用数据库吗 Py
  • 如何从 Bash 中的字符串中删除最后 n 个字符?

    我有一个变量var在包含字符串的 Bash 脚本中 echo var some string rtf 我想删除该字符串的最后四个字符并将结果分配给一个新变量var2 以便 echo var2 some string 我怎样才能做到这一点 你
  • IBM DataPower 3.7.1.x 与 WCF 客户端相关的问题

    我尝试在 WCF 中使用 IBM DataPower 3 7 1 x Web 服务 但收到以下错误消息 找不到 System IdentityModel Tokens X509SecurityToken 令牌类型的令牌身份验证器 根据当前的
  • Nodejs 中的 setInterval 奇怪行为

    我想每秒运行一次函数 而函数本身需要 3 秒来执行 结果是每个间隔的执行时间相差
  • 同一 3D 轴中的多条独立线

    I would like to draw multiple independent lines in a 3D plot in Python It looks like 我是 Python 新手 你能帮我吗 您必须使用 matplotlib
  • PHP计算数组元素[重复]

    这个问题在这里已经有答案了 你好 有人可以解释一下为什么这会返回 一个数组由 0 个元素组成 arr array 1 3 5 count count arr if count 0 echo An array is empty else ec
  • 使 glReadPixel() 运行得更快

    我想要一种非常快速的方法来为我的应用程序捕获 openGL 帧缓冲区的内容 一般来说 glReadPixels 用于将framebuffer的内容读取到缓冲区中 但这很慢 我试图通过创建 4 个线程使用 glReadPixels 从 4 个
  • 为什么我的 ListView 和 CheckBox id 变得混乱?

    我正在女巫单元中实现带有复选框的 ListView 但问题是 当我签入一个单元格并向下滚动列表时 它会变得混乱 其他单元格也会被检查 我需要在 getView 方法中做其他事情吗 这是我的 CustonAdapter public clas
  • 选择矩阵中一行的一些值

    在带有矩阵的 R 中 m lt matrix 1 20 ncol 4 colnames m lt letters 1 4 如果我只想选择一个值 它就可以了 像这样 subset m m 4 17 但如果我想要 3 个值 就会出现错误 看这个
  • JSTL c:out 不显示变量的值

    我正在关注教程关于春天我应该在控制器中设置一个变量 以便在呈现请求的 jsp 中打印 代码如下 Controller public class HelloController RequestMapping value hello htm p
  • 使用超线程运行模拟使运行时间加倍

    我使用用 python numpy cython 编写的模拟 由于我需要对许多模拟运行进行平均 因此我使用多处理模块来批量运行所有单独的模拟运行 在办公室 我有一个带 HT 的 i7 920 工作站 我家里有一台 i5 560 没有 我认为
  • 无法从 Node Js 加载 Javascript 和 CSS 文件

    我读过很多关于 无法从节点js加载js和css文件 的问题 看起来像一个愚蠢的路径错误 但由于我是节点js新手 我无法弄清楚它 我的所有文件都位于一个名为 d3 的文件夹下 有什么想法哪里出了问题吗 var http require htt
  • 我有两个错误:“UIWebview”没有可见的@interface

    我有两个错误 UIWebView 没有可见的 interface 声明选择器 highlightAllOccurencesOfString 另一个 UIWebView 没有可见的 interface声明选择器 removeAllHighli
  • 如何:后退按钮支持“Ajax”

    我有一个asp net ajax网站 它充满了在同一页面上发生的事情 无需重新加载页面 例如排序记录 分页 当用户转到同一站点中的另一个页面并按浏览器后退按钮时 如何使浏览器保存页面状态以使用预选选项 例如排序选项 分页中的页码 返回到该页
  • 我可以从 Graphics 对象中获取矢量数据吗?

    在 Flash 10 播放器中 假设我加载了一个只有十几条随机线的 Sprite 有什么方法可以检查 Sprite 的图形对象并找出这些线的位置吗 目前 我有一个疯狂的工作 我将线条绘制到位图并检查位图 但这是粗糙且昂贵的 不 又是 没有特
  • 伪造 Entity Framework 4.1 的 DbContext 来测试我的存储库

    我有一个基本存储库 所有实体存储库都继承自该存储库 在我的睾丸中 我创建了一个 Fake DbContext 和 Fake DbSet 来测试我的存储库 但是在我的 FakeDbContext 中实现一些方法时 我无法实现IDbContex