如何让 AutoFixture AutoMoq 返回实例化对象中注入服务的结果?

2024-01-16

我正在尝试测试使用存储库服务的服务类。我设置了自定义设置,我认为应该与我的存储库服务一起使用,但返回默认的匿名结果。如果您查看下面的代码示例,当我调用 svc.GetFoos 方法时,我试图获取在自定义类中注册的“Foo”对象,但我什么也没得到:

void Main()
{
    var fixture = new Fixture().Customize(
        new CompositeCustomization(
            new Customization(),
            new AutoMoqCustomization())); 

    var svc = fixture.CreateAnonymous<Bar>(); 

    Console.Write(svc.GetFoos().Count()); 
}

// Define other methods and classes here
public class Bar
{

    public IQueryable<Foo> GetFoos()
    {
        return _rep.Query<Foo>(); 
    }

    public Bar(IRepository rep) { _rep = rep;  }

    private IRepository _rep; 
}

public class Foo
{
    public string Name {get;set;}   
}

public class Customization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        var f = fixture
                .Build<Foo>()
                .With(x => x.Name, "FromCustomize")
                .CreateMany(2)
                .AsQueryable();
        fixture.Register<IQueryable<Foo>>(() => f); 
    }
}

public interface IRepository
{
    IQueryable<T> Query<T>(); 
}

如果我在固定装置实例化后将以下代码添加到 Main 方法中,它会按照我想要的方式工作,但随后我手动设置我的模拟,并且我不确定 AutoFixture AutoMoq 会给我带来什么:

var mock = fixture.Freeze<Mock<IRepository>>(); 
mock
    .Setup(x => x.Query<Foo>())
    .Returns(fixture.CreateAnonymous<IQueryable<Foo>>); 

Thanks.


AutoFixture.AutoMoq 用作自动模拟容器 http://blog.ploeh.dk/2013/03/11/auto-mocking-container/。它会通过注入自动组成对象图Mock<T>实例到上述任何消费者T.

它无法配置Mock<T>为您提供实例 - 毕竟,怎么可能呢?只有您(测试编写者)知道适当的交互应该是什么。

所以您提供的代码,包括对Setup and Returns,是正确的,尽管您可能会考虑是否Customization阶级是矫枉过正的。

如果您需要自动化大量重复的起订量设置,您应该考虑

  • 界面设计和消费模式是否合适
  • if a Fake http://msdn.microsoft.com/en-us/magazine/cc163358.aspx不会是比动态模拟更好的选择
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 AutoFixture AutoMoq 返回实例化对象中注入服务的结果? 的相关文章

  • C#9 顶级语句文件上的属性

    我正在尝试向顶级语句文件添加属性 但没有找到任何相关信息 是否可以 对于某些上下文 我想仅在该文件中禁用规则 SuppressMessage StyleCop CSharp LayoutRules SA1516 ElementsMustBe
  • C++ 有像 Pascal 一样的“with”关键字吗?

    withPascal 中的关键字可用于快速访问记录的字段 有人知道 C 是否有类似的东西吗 前任 我有一个包含许多字段的指针 但我不想这样输入 if pointer gt field1 pointer gt field2 pointer g
  • 何时对向量进行归一化?

    我正在学习 XNA 并且在几乎所有的教育套件中都可以找到http creators xna com en US http creators xna com en US 我总是看到向量上对 Normalize 的调用 我知道归一化基本上将向量
  • 隐形打开的弹出窗口

    第二天就解决这个问题 要重现 请创建新的 WPF 应用程序 xaml
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • C++ 模板参数类型推断

    我有一个这样的C 模板 template
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 在 C++ 中处理音频缓冲区时,如何执行从 float -> double -> float 的转换

    我目前正在开发一个应用程序 其中音频样本帧在以下回调中进行处理 void Eav07AudioProcessor processBlock AudioSampleBuffer buffer for int channel 0 channel
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • IBM Watson 对话服务错误:无法从“方法组”转换为“conversation.onMessage”

    我正在尝试运行 IBM Watson会话服务团结和下面是代码片段 https github com watson developer cloud unity sdk conversation private Conversation m C
  • fscanf 和 EOF 中的否定扫描集

    我的文件中有一个以逗号分隔的字符串列表 姓名 1 姓名 2 姓名 3 我想跳过所有逗号来阅读这些名字 我写了以下循环 while true if fscanf file my string 1 break 然而 它总是比预期多执行一次 给定
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • Intel 和 AMD 处理器有相同的汇编程序吗?

    C语言被用来编写Unix以实现可移植性 使用不同编译器编译的同一个C语言程序会产生不同的机器指令 为什么 Windows 操作系统能够在两者上运行Intel https en wikipedia org wiki Intel and AMD
  • C 中的静态和动态绑定(严格来说是 C,而不是 C++)是什么?

    我最初对发布这个问题感到担忧 以免它重复 但即使在谷歌搜索了许多关键字之后 我在 StackOverflow 上找不到任何解释 C 的静态和动态绑定的链接 尽管有 C 的问题和答案 但是都涉及classes以及显然不适合 C 的东西 Sta
  • Visual Studio 2015默认附加库

    当我在 VS 2015 中创建一个空项目时 它会自动将这些库放入 附加依赖项 中 kernel32 lib user32 lib gdi32 lib winspool lib comdlg32 lib advapi32 lib shell3
  • 编译器什么时候内联函数?

    在 C 中 函数仅在显式声明时才内联inline 或在头文件中定义 或者编译器是否允许内联函数 因为他们认为合适 The inline关键字实际上只是告诉链接器 或告诉编译器告诉链接器 同一函数的多个相同定义不是错误 如果您想在标头中定义函
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码

随机推荐

  • 有哪些类型的测试?

    我总是独自工作 我的测试方法通常是经常编译 并确保我所做的更改工作良好 如果不工作则修复它们 然而 我开始觉得这还不够 我对标准类型的测试感到好奇 有人可以告诉我基本测试 每个测试的简单示例以及为什么使用它 测试什么吗 Thanks 不同的
  • 使用故事板时,IBoutlets 很快为零

    在我的一个ViewControllers 当我到达viewWillAppear 我所有的IBOutlets are nil 我尝试查看 matt的解决方案 但它适用于笔尖而不是故事板 这只是当我在 iOS 7 设备上运行应用程序时出现的问题
  • 重新打包 .jar 文件

    我需要将 JRE7 库中的一些 jar 添加到我的 Android 项目中 但例如rt jar与以下内容相冲突android jar来自 Adroid 2 2 SDK 所以我收到此错误 不明智或错误地使用核心类 java 或 javax 当
  • 适用于 Linux 和 PHP 5.4 的 MSSQL Server 本机 ODBC 驱动程序

    我在 Linux Debian 6 x64 上有 Apache 2 2 16 和 PHP 5 4 3 要安装适用于 Linux 的 MSSQL Server 的本机 ODBC 驱动程序 我使用以下说明 http www codesynthe
  • 如何强制重新编译 Linq to SQL 查询的执行计划?

    我有一个动态创建的 LINQ to SQL 查询 有趣的是 当我在 SQL Management Studio 中运行它时 速度快如闪电 当我从 L2S 运行它时 一段时间后它变得非常慢 这可能是由于查询计划 执行计划造成的 当我重新启动
  • 连接两个表时索引如何提高性能

    在我们的一篇练习论文中 我们被问到了标题中的问题 我读过的大多数文章都说索引可以提高连接的性能 但没有告诉我如何提高 也许这是显而易见的事情 不需要说明 索引本质上是对列进行排序 对吗 所以我想按顺序排列一列会更容易操作 还有更多吗 还是我
  • 以简单的方式将 SQL 转换为 SQLite? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我的问题 有人有一种超级简单的方法在
  • 主机名未解析为本地 IP 地址

    我正在 vmware Fusion 中运行 Windows 8 虚拟机 它在运行 OSX 10 10 Yosemite 的 Mac 内运行 VM 的计算机名称为 Proud 当我从内部 ping 虚拟机时 即ping a 192 168 0
  • 基于逗号分隔字符向量列值的Python熔化数据框

    我目前正在进行一项测试 其中有不同的区域和一些相关的统计数据 以及位于这些区域的以逗号分隔的基因列表 该列表的数量是可变的 并且可能不包含任何内容 NA 我怎样才能 融化 这个数据框 region id statistic genelist
  • 使用 Excel VBA 编写和格式化 Word 文档

    我正在尝试使用 Excel VBA 编写 Word 文档 我可以创建一个Word文档 向其中写入文本 更改样式都不是问题 我想做的是将一些文本居中 但我一生都无法弄清楚 这是我用来编写文档的代码 Set wrdApp CreateObjec
  • 显示并关闭模态视图控制器 UIImagePickerController 之后,我的 Cocos2d iPhone 应用程序不再看到多次触摸

    我有一个应用程序 我在其中显示照片选择器 UIImagePickerController 但在用户关闭后 只有单次触摸才起作用 我想我知道问题的根源 但我不知道如何解决它 在显示模式对话框之前 触摸期间的堆栈如下所示 3 0x00074de
  • CakePHP 3 手动安装

    目前我使用 CakePHP 2 6 8 我想迁移到 CakePHP 3 安装指南 http book cakephp org 3 0 en installation html推荐使用Composer 但 Composer 并不能完成所有工作
  • 对数组中每个值的新 API 调用

    我基本上想要这种对象 id 5040 requester id 1234 requester name 约翰 id 5046 requester id 999 requester name 吉姆 id 5049 requester id 5
  • 使用CSS创建水平树

    我有一个数组 用于填充谱系表 它的顺序是这样的 3 1 4 5 2 6 等等 一个例子是http bullybloodlines net dogdetails php name muscletone 27s lucky bam bam of
  • 使用另一个类的 JavaFx 应用程序实例

    我有一个如下所示的 MainWindowFx 类 它基本上创建了一个简单的JavaFX GUI package drawappfx import javafx stage Stage import javafx scene Scene im
  • 流读(0)指令

    我在这里找到了一个代码https github com substack stream handbook https github com substack stream handbook它从流中读取 3 个字节 我不明白它是如何工作的 p
  • 背书政策不起作用

    当我使用管理员部署一个网络时 一个组织包括三个对等点 我的endorsement policy json如下 但不起作用 identities role name member mspId Org1MSP policy 1 of signe
  • 在网络上区分 iPadOS 和 macOS

    iPadOS beta 上 Safari 的用户代理目前与 macOS 上的 Safari 完全相同 还有其他方法可以区分 iPad 和 Mac 吗 iPad running iOS Mozilla 5 0 iPad CPU OS 10 3
  • Selenium WebDriver 有录像机吗?

    我正在 Selenium Webdriver 中使用 IE 特定应用程序 我知道我们可以截取执行的屏幕截图 同样 是否有任何选项可以将硒执行记录为视频 WebDriver 中什么也没有 酱料用途http www ffmpeg org htt
  • 如何让 AutoFixture AutoMoq 返回实例化对象中注入服务的结果?

    我正在尝试测试使用存储库服务的服务类 我设置了自定义设置 我认为应该与我的存储库服务一起使用 但返回默认的匿名结果 如果您查看下面的代码示例 当我调用 svc GetFoos 方法时 我试图获取在自定义类中注册的 Foo 对象 但我什么也没