NUnit 断言枚举值包含一个标志

Ber*_*ler 2 .net flags nunit

在使用 NUnit 为我们的 .Net (C#) 库编写一些测试时,我遇到了以下问题:我有一个具有 Flags 属性的枚举,例如

[Flags]
public enum Powers : int
{
    Undefined = 0,
    Zero = 1,
    One = 2,
    Two = 4,
}
Run Code Online (Sandbox Code Playgroud)

现在我想编写一个 NUnit 测试来检查

Powers aValue = Powers.One | Powers.Two 
Run Code Online (Sandbox Code Playgroud)

包含 Powers.Two。目前,我使用

Assert.That((aValue & Powers.Two) == Powers.Two), "something went wrong")
Run Code Online (Sandbox Code Playgroud)

但是没有更优雅的方法来做到这一点吗?谢谢你的提示。

And*_*son 5

您可以使用Enum.HasFlag

在你的情况下:

Assert.That(aValue.HasFlag(Powers.Two), "something went wrong");
Run Code Online (Sandbox Code Playgroud)

请注意,此方法仅在.NET Framework 4及更高版本中可用。