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 的相关文章

  • 添加 Nullable int 时保持 null?

    我想添加可为空的int 并保留null当所有值都是null 我想要这个结果 1 2 3 1 null 1 null null null O null 0 问题是 如果我将一个值与 null 相加 结果为 null int i1 1 int
  • 在路由mvc 4中添加公司名称

    我一直在尝试为 Facebook 等用户提供在 URL 中添加公司名称的选项 http localhost 50753 MyCompany Login 我尝试过不同的网址 但没有成功 routes MapRoute name Default
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include

随机推荐

  • 在 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