假设我有一个枚举标志:

[Flags]
public enum ColorType
{
    None = 0,
    Red = 1 << 0,
    White = 1<<1,
    Yellow = 1 << 2,
    Blue = 1 << 3,
    All = Red | White | Yellow | Blue
}


我有以下函数,该参数是标志的组合,例如DoSomething(ColorType.Blue | ColorType.Yellow)。

public void DoSomethingr(ColorType theColorTypes)
{
        if (theColorTypes.HasFlag(All)) Foo1();
        if (theColorTypes.HasFlag(White) && theColorTypes.HasFlag(Red) )  Foo2();
        if (!theColorTypes.HasFlag(Blue)) Foo3();
        . . .
}


有没有一种简单的方法可以测试所有可能的标志按位组合?

[Test]
public void Test1(ColorType.Red | ColorType.Yellow | ColorType.White)

[Test]
public void Test1(ColorType.Red | ColorType.Yellow | ColorType.white | ColorType.Blue)


谢谢

最佳答案

循环所有可能的值,并将其放在TestCaseSource中,以针对每个枚举值生成不同的测试:

public IEnumerable<ColorType> TestCaseSource
{
    get
    {
        int start = (int)ColorType.None;
        int count = (int)ColorType.All - start + 1;
        return Enumerable.Range(start, count).Select(i => (ColorType)i);
    }
}

[TestCaseSource("TestCaseSource")]
public void Test1(ColorType colorType)
{
    // whatever your test is
}

08-16 17:06