【问题标题】:How to pass Guid.Empty into a parameterized unit test?如何将 Guid.Empty 传递给参数化单元测试?
【发布时间】:2017-01-09 11:32:38
【问题描述】:

我正在尝试将 Guid.Empty 传递到我的单元测试中:

[TestCase(null)]
[TestCase(Guid.Empty)]
public void When_AccountGuid_IsNullOrEmpty_AddError_Is_Invoked(Guid? accountGuid)
{

}

但是编译器抱怨:

属性参数必须是常量表达式,typeof 表达式 或属性参数类型的数组创建表达式

如何将 Guid.Empty 传递给我的单元测试方法?

我还尝试通过将其声明为类中的私有成员来排除它,但编译器错误相同:

        private static Guid _emptyGuid = Guid.Empty;
        [TestCase(null)]
        [TestCase(_emptyGuid)]
        public void When_AccountGuid_IsNullOrEmpty_AddError_Is_Invoked(Guid? accountGuid)
        {

        }

【问题讨论】:

    标签: c# .net visual-studio unit-testing nunit


    【解决方案1】:

    在这种情况下,使用TestCaseSource 属性来定义案例列表。

    static Guid?[] NullAndEmptyGuid = new Guid?[] { null, Guid.Empty };
    
    [TestCaseSource("NullAndEmptyGuid")]
    public void When_AccountGuid_IsNullOrEmpty_AddError_Is_Invoked(Guid? accountGuid)
    {
    
    }
    

    【讨论】:

      【解决方案2】:

      Empty 实际上是一个变量,你不能在属性中传递变量。 表达式必须是常量,尝试传递“new Guid()”或默认值(Guid)

      【讨论】:

      • 不幸的是,我相信new Guid()default(Guid) 仍然会给出同样的编译错误。
      • @ScottChamberlain - 在您发表评论后自己进行了测试,是的,同样的错误:)
      • Guid 不是属性参数类型,Guid(或者更有趣的是decimal)不能用作属性参数。
      • @BryanWoodford 哇,我很确定default 会起作用,但我自己做了一个测试,结果没有。我删除了我的旧 cmets
      • 我认为 default(Guid) 会在编译时知道并通过该检查。没有实际测试它,我没有可用的电脑:S 哦,好吧......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多