0

Considering the following model

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

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

Will the following code snippet ensure that every enum value occures at least once? If not, what would be a better (more explicit) approach? My enum contains more then 200 elements...

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

fake.ItemsElementName = fixture.CreateMany<ItemsChoiceType>(itemsChoiceTypeElements).ToArray();
Matthias Güntert
  • 4,013
  • 6
  • 41
  • 89

2 Answers2

0

I would use Except() LINQ function like this:

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


        }
    }
Siraf
  • 1,133
  • 9
  • 24
0
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>>();
Sheetal
  • 91
  • 1
  • 7