我的目标是只能定义与特定测试相关的参数,并且在c#中使用不可变的类型(严格来说是构造函数注入,没有设置方法),并且有一个定制的夹具来处理那些不是参数的有效值在测试中指定。
我为之烦恼-忽略了我的“ with”属性-字符串,DateTime和int的属性自定义。基于“访客”的示例:
public class Guest
{
public readonly string GuestId;
public readonly string GivenName;
public readonly string SurName;
public readonly AgeCode AgeCategory;
public Guest(string guestid, AgeCode ageCategory, string givenName, string surName)
{
AgeCategory = ageCategory;
GivenName = givenName;
SurName = surName;
GuestId = guestid;
}
}
我像这样自定义一个Fixture实例:
fixture.Customize<Guest>(composer =>
composer
.With(g => g.GivenName, "Finn")
.With(g => g.GuestId, "1")
.With(g => g.SurName, "Rasmussen")
);
...这在使用时有效fixture.Create<Guest>()
,但在使用时无效fixture.Build<Guest>().With(g=>g.Surname, "Olsen")
。
查看AutoFixture签名,我理解这是因为Fixture.Build<T>()
实例化了一个新的作曲家,并且该作曲家没有作为方法的“作曲家”实例注入Customize<T>
。另外-我知道属性的第一个自定义项“获胜”,因此必须将“覆盖”项推到自定义项的前面...
有什么建议么?我在这里完全按照轨道使用螺丝刀锤打钉子吗?或者我只是在这里没有看到聪明和/或明显的东西...
对于其他发现此问题的人:可以使用以下方法更改构建类型的默认策略:
Fixture.Register<TType>(Func<TType> creator)
奇迹般有效...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句