Автофиксирование: убедитесь, что каждый элемент перечисления используется хотя бы один раз - PullRequest
0 голосов
/ 04 января 2019

Учитывая следующую модель

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();

Ответы [ 2 ]

0 голосов
/ 15 января 2019
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>>();
0 голосов
/ 04 января 2019

Я бы использовал функцию LINQ для Except () следующим образом:

  class Program
    {
        enum Days
        {
            Monday,
            Tuesday,
            Wednesday
        }

        static void Main(string[] args)
        {

            Days[] allDays = { Days.Monday, Days.Tuesday, Days.Wednesday };

            // This prints true cause all enum days exist in allDays
            Debug.WriteLine(Enum.GetValues(typeof(Days)).OfType<Days>().Except(allDays).Count() == 0);

            Days[] someDays = { Days.Monday, Days.Wednesday };

            // This prints false cause not all days exist in someDays
            Debug.WriteLine(Enum.GetValues(typeof(Days)).OfType<Days>().Except(someDays).Count() == 0);


        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...