当前位置: 首页 > 编程语言 > C#

轻松指定单个构造函数参数的值?分享

时间:2023-04-10 15:32:27 C#

轻松指定单个构造函数参数的值?Autofixture中是否有一些简单的方法可以使用它的构造函数来创建对象,但硬编码/指定用于构造函数中单个参数的值?我看到这可以通过属性来完成,使用类似的东西:fixture.Build().With(x=x.Val,"hardcodedvalue").Create()来自评论中关于这个问题的讨论:我已经经常想到要创建一个新对象,但我只关心一个参数。也许参数值驱动某种计算或转换。我希望值本身是随机的,但测试需要知道选择了什么随机值。假设这是根本问题,我会尝试修复它。请求对象的最简单解决方案是在AutoFixture创建对象后简单地请求对象的值:varfixture=newFixture();varmc=fixture.Create();varspecialValue=mc.SpecialValue;//用specialValue做点什么。..如果您只需要知道什么是特殊值,但不需要它具有特定值,则可以使用此技术。这显然要求您将构造函数参数中的值公开为(只读)属性,但无论如何这是个好主意。创建后赋值如果需要一个参数有特定的值,可以在创建后赋值:varfixture=newFixture();varmc=fixture.Create();mc.SpecialValue="一些非常特别的值";这需要您提供该值作为可写属性。虽然我个人不是那种方法的忠实粉丝,因为这会使对象可变,但很多人都以这种方式设计他们的对象,如果是这样,为什么不利用它呢?在创建后使用复制和更新如果你希望你的对象是不可变的,你仍然可以使用上述技术的变体。在F#中,您可以使用所谓的复制和更新表达式来实现相同的目标。在F#中,它类似于:letfixture=Fixture()letmc={fixture.Create()withSpecialValue="Somespecialvalue!"您可以通过提供类复制和更新方法在C#中模拟它,这样您可以编写如下内容:varfixture=newFixture();varmc=fixture.Create().WithSpecialValue("一些非常特殊的值");这是我在C#代码中一直使用的技术。AutoFixture有一个惯用的断言来测试这样的复制和更新方法。为参数注入值如果可以为特定构造函数参数注入固定值,则可以使用AutoFixture核心的构建块来实现。这个测试演示了如何:[事实]publicvoidCustomizeParameter(){varfixture=newFixture();fixture.Customizations.Add(newFilteringSpecimenBuilder(newFixedBuilder("Ploeh"),newParameterSpecification(typeof(string),"specialValue")));varactual=fixture.Create();Assert.Equal("Ploeh",actual.SpecialValue);但是,这会导致该夹具实例的参数始终为“Ploeh”。它也是重构不安全的,因为它基于引用参数名称的字符串。以上就是C#学习教程:轻松指定单个构造函数参数的值?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: