首页 > 解决方案 > AutoFixture:确保每个枚举元素至少使用一次

问题描述

考虑以下模型

public class CalculatedValue
{
    //...   
    public ItemsChoiceType[] ItemsElementName { get; set; }
}

public enum ItemsChoiceType
{
    Value1, 
    Value2, 
    //...
    ValueN
}

下面的代码片段会确保每个枚举值至少出现一次吗?如果没有,什么是更好(更明确)的方法?我的enum包含超过 200 个元素...

var fixture = new Fixture();    
var fake = fixture.Create<CalculatedValue>();    
var itemsChoiceTypeElements = Enum.GetNames(typeof(ItemsChoiceType)).Length;

fake.ItemsElementName = fixture.CreateMany<ItemsChoiceType>(itemsChoiceTypeElements).ToArray();

标签: c#enumstddautofixture

解决方案


var calculatedValue = new Fixture().Create<Generator<CalculatedValue>>();

fixture.Customize<CalculatedValue>(c => c.Without(x => x.ItemsElementName));
fixture.Customize<IEnumerable<CalculatedValue>>(
            c => c.FromFactory(
                () => Enum.GetValues(typeof(ItemsChoiceType)).Cast<ItemsChoiceType>()
                .Select(s => calculatedValue.First(u => u.ItemsElementName == s))));

var calculatedValues = fixture.Create<IEnumerable<CalculatedValue>>();

推荐阅读