IList 构造函数参数和 AutoFixture

2024-01-01

Using 自动夹具 http://autofixture.codeplex.com/,我正在尝试构造匿名实例Project:

 _f=new Fixture().Customize(new AutoMoqCustomization());
 _p=_f.CreateAnonymous<Project>();

这失败了,原因Project公共构造函数要求IList<Partner>

public Project(/*.....*/,IList<Partner> partners){
  Guard.AgainstEmpty(partners);
}

堆栈跟踪没有意义(至少对我来说)。只是一些反思:

failed: System.Reflection.TargetInitationException :调用目标已引发异常。
---- System.ArgumentException:值不在预期范围内。
在 System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo 方法,Object[] args,SignatureStruct& 签名,RuntimeType declaringType)

那么 - 如何确保 autoFixture 传递匿名合作伙伴集合以构建它?


这不是的错IList<Partners>。还有一个参数叫Priority. Priority本身持有Measure, Measure holds IList<Indicator>并打电话Guard.AgainstEmpty(indicators)在构造函数中。

所以它看起来像这样:

fixture.CreateAnonymous<Foo>(); //kaboom!
public class Foo{
  public Foo(IList<Bar> bars){
    Guard.AgainstEmpty(bars); //just checks count for ienumerable & throws if 0
    Bars=bars;
  }
  public IList<Bar> Bars {get;private set;} //should be readonly collection...
}

public class Fizz{
  public Fizz(Foo foo){
    Foo=foo;
  }
  public Foo{get;private set;}
}

public class Bar{}

施工失败于Guard.AgainstEmpty方法。所以 - 问题变成 - 如何确保 AutoFixture 在构造 foos 之前填充 Bars 集合中的一些条形?


这有帮助。浏览source http://autofixture.codeplex.com/SourceControl/changeset/view/a2b734445f4a#Src%2fAutoFixtureDocumentationTest%2fContact%2fValidatingValueObject%2fContactTest.cs经常有帮助。

var indicators=_f.CreateMany<Indicator>();
_f.Register<IList<Indicator>>(()=>indicators.ToList());

不过可能还有更好的方法。


总的来说,目前的情况是这样的:

  _f=new Fixture().Customize(new AutoMoqCustomization());
  var indicators=_f.CreateMany<Indicator>();
  _f.Register<IList<Indicator>>(()=>indicators.ToList());
  var regionName=_f.CreateAnonymous<string>();
  _f.Register<string,Country,bool,Region>((name,country,call)=>
    new Region(regionName,_f.CreateAnonymous<Country>(),true));
  _c.Set(x=>x.Regions,_f.CreateMany<Region>().ToList());
  _f.Register<IList<ManagementBoardEntry>>(()=>
    _f.CreateMany<ManagementBoardEntry>().ToList());
  _f.Register<IList<FinancialInfoEntry>>(()=>
    _f.CreateMany<FinancialInfoEntry>().ToList());
  _f.Register<IList<Partner>>(()=>_f.CreateMany<Partner>().ToList());
  _p=_f.CreateAnonymous<Project>();

不能说这很漂亮(欢迎任何重构建议),但它仍然比手动编写所有内容要好得多。


Using IList肯定有一个错误的选择。更糟糕的是 - 我正在使用IList对于属性也是如此。这邀请客户直接使用它们,而不是通过聚合根。

使用时有一个缺点params。不能使用多个(除非我再次缺少一些基础知识)。我收到列表作为输入(Excel 工作表 DOM 的一部分),无法知道编译时会有多少元素。

模型确实很新鲜。刚刚烘烤它(所以我很可能对那些空检查是错误的,将与客户和业务分析师讨论这一点)。

我的策略是自由地塑造它并通过单元测试将其推向所需的状态。这就是我有点不喜欢严格的 TDD 的实际原因。它夺走了我的注意力,迫使我过早地思考细节而不是整体。我更喜欢画草图并进行完善,直到看起来不错为止。但这可能是因为我对测试不够流畅。

不管怎样 - 谢谢你的好建议。我会继续了解更多关于AutoFixture的知识。

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

IList 构造函数参数和 AutoFixture 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 如何使用泛型类型的 DataContractSerializer 编写自定义序列化器?

    我想编写一个自定义序列化器 用于将会话状态存储到Azure 缓存 预览版 这意味着这个自定义序列化器必须实现IDataCacheObjectSerializer 如果我错了 请告诉我 我需要编写这个自定义序列化程序的原因是我需要序列化一些包
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • 单元测试术语概述(存根与模拟、集成与交互)?

    我在我的项目中使用了更多的单元测试 并阅读了我可以在网上找到的所有信息 并且对很多术语感到困惑 因此 我可能在对话和谷歌搜索中错误地使用了这些术语 有人可以概述所有单元测试术语 例如 假 类型以及测试类型 交互与集成 吗 当谈到模拟 假货和
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • 在 Haskell 中解析大型日志文件

    假设我有几个 200mb 的文件想要 grep 遍历 我该如何在 Haskell 中做到这一点 这是我的初始程序 import Data List import Control Monad import System IO import S
  • 如何通过在shopify中点击将多个产品添加到购物车

    我想在 Shopify 中单击一下即可将多个产品添加到购物车 应用经常一起购买的产品的算法 如果有人了解 Shopify API 或与上述相关的内容 请提供帮助 请用您的知识指导 网上有大量相关文档 https help shopify c
  • 如何让 console.clear() 在清除后不给出消息[重复]

    这个问题在这里已经有答案了 When ever I use console clear it says in console Console was cleared Is there a way to clear the console w
  • 按嵌套数组键分组

    我有一些示例数据 显示了与文档相关的一些数据 docs id 及其所指的人 details id const docs id 89 state accepted details id 20656 type Claimant name Fir
  • 获取linux中每个设备的内存映射

    如何获取 Linux 识别的所有物理设备的内存映射 我已经查看了 proc iomem 和 proc ioports 但是 我无法找到每个设备的内存映射 关于如何实现这一目标有什么想法吗 据我所知 唯一通用的方法是 proc iomem 这
  • 在 MVC3 中扩展不显眼的 javascript 以将样式添加到 div 客户端的最佳方法

    我正在使用 html5 Razor MVC3 利用 Twitter 的 Bootstrap 模板 我想要表单验证看起来像他们记录的那样光滑 http twitter github com bootstrap forms http twitt
  • 使用 boto,在 s3 上已存在的文件上设置 content_type

    我正在使用 django 存储和 s3boto 后端 根据这个问题 http code larlet fr django storages issue 5 s3botostorage set content type header acl
  • Redux Toolkit Streaming 更新 - 如何处理关系实体适配器?

    我正在处理使用 RTK 查询和实体适配器的聊天 我目前有 2 个不同的实体适配器 一种用于聊天 一种用于消息 如何选择特定聊天的所有消息 我是否需要在聊天适配器内存储消息 id 数组 还是选择所有消息并按parent chat uuid 属
  • Spring Web Flow 防止后退按钮使用

    因此 我在项目上使用 Spring Web Flow 并希望在元素上使用history discard 和history invalidate 属性 我已将这些属性放置在我想要的位置 但是 当我在转换上运行历史记录属性后尝试通过导航到视图来
  • UWP - 将 TextBox.Text 绑定到 Nullable

    目前无法绑定到任何内容 这是正确的吗 Nullable
  • 使用命名元组多处理对象 - Pickling 错误

    我在想要放入多重处理的对象中使用命名元组时遇到问题 我收到酸洗错误 我尝试了其他 stackoverflow 帖子中的一些方法 但没有成功 这是我的代码的结构 包主 测试模块 import myprogram package of clas
  • Cassandra数据复制问题

    我有一个 2 节点 cassandra 集群 复制因子为 2 并且 AutoBootStrap true 启动期间一切正常 两个节点都能看到对方 我们将这些节点称为 A 和 B 通过节点 A 将一组键和列 我们称之为 K1 添加到 cass
  • Swift 3:如何使用 AVVideoComposition 导出带有文本的视频

    我正在尝试使用AVVideoComposition在视频顶部添加一些文本并保存视频 这是我使用的代码 I 创建一个AVMutableComposition and AVVideoComposition var mutableComp AVM
  • 避免每次都执行 adb tcpip 5555

    我喜欢能够通过 WIFI 使用 ADB 来操作我的 Android 手机 通过 USB 连接后 我运行adb tcpip 5555 然后我可以断开 USB 并运行adb connect phone s IP 5555 我不喜欢的是 每次我必
  • 如何使用反应钩子获取网络摄像头?

    我正在尝试使用 React hooks 将网络摄像头源显示在我的应用程序上 我还需要能够从提要中捕获最新的图像 我相信我有基础 但缺少一些东西 import React useState useEffect from react expor
  • 如何在 dynamodb 本地执行更新

    目前我有 amazon dynamodb local 的本地图像 每当我尝试对数据库执行更新操作时 它都会创建一个重复行而不是更新现有记录 我的表定义是 TableName commission KeySchema AttributeNam
  • 禁用 Chromium“无法更新 Chromium”窗口通知

    我们在触摸屏 Linux 上以 kiosk 模式运行 Google Chromium 我们经常收到 无法更新 Chromium 窗口通知 我们还没有找到可以阻止这种情况的标志 有人有主意吗 这个Bug似乎四处飘荡Debian https b
  • “代表”发送电子邮件

    我收到了很多 代表 的电子邮件 例如 AddThis 插件代表从 addThis com 发送电子邮件 电子邮件受保护 cdn cgi l email protection 如何在 C ASP NET 中执行此操作 另外 如果我们使用 gm
  • Android 上视图背景颜色的动画变化

    如何在 Android 上以动画方式改变视图的背景颜色 例如 我有一个背景色为红色的视图 视图的背景颜色更改为蓝色 如何在颜色之间实现平滑过渡 如果无法通过视图来完成此操作 则欢迎使用替代方案 您可以使用新的属性动画 API http de
  • IList 构造函数参数和 AutoFixture

    Using 自动夹具 http autofixture codeplex com 我正在尝试构造匿名实例Project f new Fixture Customize new AutoMoqCustomization p f CreateA