Permutation
Avalanche.Utilities.Permutation is a class library for unit testing. It's a toolkit for feeding different variations of parameters.
PermutationSetup is populated with properties and possible values.
PermutationSetup permutation = new PermutationSetup();
// Add property "Color"
permutation.Add("Color", "Red");
permutation.Add("Color", "Green");
permutation.Add("Color", "Blue");
// Add property "Number"
permutation.Add("Number", "10");
permutation.Add("Number", "100");
permutation.Add("Number", "1000");
// Add property "Size"
permutation.Add("Size", "Small");
permutation.Add("Size", "Medium");
permutation.Add("Size", "Large");
Every scenario can be iterated.
foreach (Scenario scenario in permutation.Scenarios)
{
string color = scenario["Color"]!.Name;
string number = scenario["Number"]!.Name;
string size = scenario["Size"]!.Name;
Console.WriteLine($"Color={color}, Number={number}, Size={size}");
}
The result.
Color=Red, Number=10, Size=Small
Color=Green, Number=10, Size=Small
Color=Blue, Number=10, Size=Small
Color=Red, Number=100, Size=Small
Color=Green, Number=100, Size=Small
Color=Blue, Number=100, Size=Small
Color=Red, Number=1000, Size=Small
Color=Green, Number=1000, Size=Small
Color=Blue, Number=1000, Size=Small
Color=Red, Number=10, Size=Medium
Color=Green, Number=10, Size=Medium
Color=Blue, Number=10, Size=Medium
Color=Red, Number=100, Size=Medium
Color=Green, Number=100, Size=Medium
Color=Blue, Number=100, Size=Medium
Color=Red, Number=1000, Size=Medium
Color=Green, Number=1000, Size=Medium
Color=Blue, Number=1000, Size=Medium
Color=Red, Number=10, Size=Large
Color=Green, Number=10, Size=Large
Color=Blue, Number=10, Size=Large
Color=Red, Number=100, Size=Large
Color=Green, Number=100, Size=Large
Color=Blue, Number=100, Size=Large
Color=Red, Number=1000, Size=Large
Color=Green, Number=1000, Size=Large
Color=Blue, Number=1000, Size=Large
Each value can be associated with an object. The object is initialized with a delegate Func<Run, object>, and can be cleaned with another delegate Action<Run>.
PermutationSetup permutation = new PermutationSetup();
// Add property "Color"
permutation.Add("Color", "Red", null, run => Color.Red, run => { /*finalizer here*/ });
permutation.Add("Color", "Green", null, run => Color.Green);
permutation.Add("Color", "Blue", null, run => Color.Blue);
// Add property "Number"
permutation.Add("Number", "10", null, run => 10);
permutation.Add("Number", "100", null, run => 100);
permutation.Add("Number", "1000", null, run => 1000);
// Add property "Size"
permutation.Add("Size", "Small", null, run => Size.Small);
permutation.Add("Size", "Medium", null, run => Size.Medium);
permutation.Add("Size", "Large", null, run => Size.Large);
Use Run() to execute the initializers and finalizers.
foreach (Scenario scenario in permutation.Scenarios)
{
using (Run run = scenario.Run().Initialize())
{
Color color = (Color)run["Color"]!;
int number = (int)run["Number"]!;
Size size = (Size)run["Size"]!;
Console.WriteLine($"Color={color}, Number={number}, Size={size}");
}
}
Enums used in this example.
enum Color { Red, Green, Blue }
enum Size { Small, Medium, Large }