NUnit设置标志';d枚举

本文关键字:枚举 设置 标志 NUnit | 更新日期: 2023-09-27 18:22:06

我正试图让Nunit的TestCase与Flag'd Enum:一起工作

[NUnit.Framework.TestCase(Framework.Environments.HD3 | Framework.Environments.BizTalk, "Test","Test")]
        public void SimpleTest(Framework.Environments environment, string org, string source)
        {
            environment = Framework.Environments.BizTalk| Framework.Environments.HI5;
            ....

测试的第一行是查看该值是否设置正确——它是否有效。但是,TestCase没有设置Enum。它得到的是HD3,而不是HIALUnScured。

我的枚举就是这样创建的:

    [Flags]
    public enum Environments
    {
        HD3 = 0,
        HD1 = 1 << 0,
        HD2 = 1 << 1,
        HD4 = 1 << 2,

有没有想过如何让它发挥作用?是的,我可以使用第四个变量,但我有兴趣了解发生了什么。

更新

在进一步的调查中,我发现Nunit可能是问题所在:

    [TestCase("test", "test")]
    public void test(string a, string b)
    {
        System.Diagnostics.Debug.Write("===============" + a + b);
    }

方法内部:a和b为null。

这很可能与我的NUnit有关,我得挖一点。

更新2看来TestDriven.NET是罪魁祸首。它没有按预期工作。我更新了TestDriven,它运行得很好。

NUnit设置标志';d枚举

您应该修改您的标志声明,假设HD3是一个可标记的值。

public enum Environments
{
    None = 0,
    HD1 = 1 << 0, // 1
    HD2 = 1 << 1, // 2
    HD3 = 1 << 2, // 4  
    HD4 = 1 << 3, // 8
    // etc.
}

在第一个例子中,假设HD3为零,Framework.Environments.HD3 | Framework.Environments.BizTalk相当于只写Framework.Environments.BizTalk,因为任何与零"或"运算的值都只是其他操作数值。

这里有一个单元测试来证明它如我所描述的那样工作。

[TestFixture]
class EnumFlagsTests
{
    [Test]
    [TestCase(Environments.HD1 | Environments.HD3)]
    public void ShouldBeTrue(Environments input)
    {
        // arrange
        Environments expectedEnum = (Environments.HD1 | Environments.HD3);
        int expectedNumericalValue = 5;
        // assert
        Assert.AreEqual(expectedEnum, input);
        Assert.AreEqual(expectedNumericalValue, (int)input);
    }
}
[Flags]
public enum Environments
{
    None = 0,
    HD1 = 1 << 0, // 1
    HD2 = 1 << 1, // 2
    HD3 = 1 << 2, // 4  
    HD4 = 1 << 3, // 8
    // etc.
}

NUnit绝对不会向测试用例传递null:如果传递了null,NUnit自己的测试就会失败,我们会从人们那里听说的!

我怀疑您可能在使用NUnit自己的运行程序之外的其他东西来执行测试。是这样吗?

TestDriven.NET是罪魁祸首。升级成功了。