使用Autofixture将子实例上的属性值设置为固定值在使用Autofixture构建parent时,是否可以将属性在子实例上分配一个固定值?它将为子实例上的所有属性添加一个默认值(如charm),但我想覆盖并为子实例上的某个属性分配一个特定值。给定这种父/子关系:publicclassPerson{publicstringFirstName{get;放;}publicstringLastName{get;放;}publicAddress地址{get;放;}}publicclassAddress{publicstringStreet{get;放;}publicintNumber{get;放;}publicstringCity{get;放;}publicstringPostalCode{get;放;我想为地址实例上的City属性分配一个特定的值。我在想这个测试代码:varfixture=newFixture();varexpectedCity="foo";varperson=fixture.Build().With(x=>x.Address.City,expectedCity).Create();断言.AreEqual(expectedCity,person.Address.City);这不可能。我认为,由反射异常System.Reflection.TargetException引起:对象与目标类型不匹配。...Autofixture正在尝试将值分配给Person实例而不是Address实例上的City属性。有什么建议么?是的,我知道我可以像这样添加一个额外的步骤:varfixture=newFixture();varexpectedCity="foo";//额外的步骤开始varaddress=fixture.Build().With(x=>x.City,expectedCity).Create();//额外步骤结束varperson=fixture.Build().With(x=>x.Address,address).Create();Assert.AreEqual(expectedCity,person.Address.City);...但希望第一个版本或类似的东西(更少的步骤,更简洁)。注意:我使用的是Autofixturev3.22.0不要掉以轻心,但最简单的解决方案实际上可能是这样的:[Fact]publicvoidSimplestThingThatCouldPossiblyWork(){varfixture=newFixture();varexpectedCity="foo";varperson=fixture.Create();person.Address.City=expectedCity;Assert.Equal(expectedCity,person.Address.City);为属性分配显式值是大多数语言已经擅长的事情(C#当然可以),所以我认为AutoFixture不需要复杂的DSL来重现一半的功能。为了完整起见,这是另一种方法:fixture.Customize(c=>c.With(addr=>addr.City,"foo"));varperson=fixture.Create();这将自定义所有地址如果您最终经常使用它,那么实例的创建可能值得将其包装在ICustomization中:With(addr=>addr.City,"foo"));fixture.Customize(newAddressConventions());您可以在构建器上使用Do方法:varperson=this.fixture.Build().Do(x=>x.Address.City=expectedCity).Create();也可以将实例注入并冻结到fixture中:以上是C#学习教程:使用Autofixture将子实例上的属性值设置为固定值详细了解C#学习教程,希望大家多多关注this.fixture.Inject(expectedCity);如需转载请注明出处:
