0

我正在尝试让 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 没有设置枚举。它得到 HD3 而不是 HIALUnSecured。

这就是我的枚举的创建方式:

    [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 为空。

这很可能与我的 NUnit 有关,我将不得不挖掘一下。

更新 2 似乎 TestDriven.NET 是罪魁祸首。它没有按预期工作。我更新了 TestDriven,它运行良好。

4

3 回答 3

2

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

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

    // etc.
}

在您的第一个示例中Framework.Environments.HD3 | Framework.Environments.BizTalk,假设HD3为零,则等同于将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.
}
于 2013-07-12T00:12:27.303 回答
2

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

我怀疑您可能正在使用 NUnit 自己的跑步者以外的东西来执行测试。是这样吗?

于 2013-07-12T16:50:10.480 回答
0

TestDriven.NET 是罪魁祸首。升级有效。

于 2013-07-15T16:20:35.277 回答