我有一个概念上看起来像这样的课程:
public class Entity
{
private readonly List<double> _values = new List<double>();
...
public List<double> Values
{
get
{
return _values;
}
}
}
在单元测试中,我想使用AutoFixture提供随机实体列表:
var entities = this.fixture.CreateMany<Entity>().ToList();
但是,没有自动生成的值添加到Entity对象的Values属性中,正如我预期的那样(希望...)。我试图将值列表更改为不是只读,并将一个setter添加到Values属性,这解决了问题,但是不是更好的替代方法吗?
答案 0 :(得分:3)
AutoFixture不会填充只读集合,但您可以要求它这样做:
var entity = fixture.Create<Entity>();
fixture.AddManyTo(entity.Values);
答案 1 :(得分:1)
当我发现这个限制时,我继续创建了一个AutoFixture扩展来做到这一点:Murph.AutoFixture.AutoReadOnlyCollectionProperties。也可在nuget.org公开发布。
在构建对象时,对于任何类型实现ICollection<T>
的公共,只读属性或字段,它将使用fixture创建T列表,然后调用集合的Add()
方法每一个。它将遵循fixture OmitAutoProperties
设置,并提供一种扩展方法WithoutEx()
,它模拟内置Without()
(不适用于只读属性或字段)。
用法非常简单:
fixture.Customize( new AutoReadOnlyCollectionPropertiesCustomization() );
fixture.Customize< Model >( c => c.WithoutEx( m => m.Collection ) );