如何通过Guid.空为参数化单元测试

本文关键字:参数 单元测试 何通过 Guid | 更新日期: 2023-09-27 18:05:23

我试图通过Guid。空到我的单元测试中:

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

但是编译器在抱怨:

属性参数必须是一个常量表达式,typeof表达式或属性参数类型

的数组创建表达式

如何传递Guid。空到我的单元测试方法?

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

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

如何通过Guid.空为参数化单元测试

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

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

使用DynamicData代替DataRow用于。net测试框架(Microsoft.VisualStudio.TestTools.UnitTesting):

[DataTestMethod]
[DataRow("")]
[DataRow(" ")]
[DataRow(0)]
[DynamicData(nameof(DynamicDefaultValues), DynamicDataSourceType.Property)]
public void IsValid_WithInvalidInput_ShouldReturnFalse(object input)
{
    // Validate
}

private static IEnumerable<object[]> DynamicDefaultValues
{
    get
    {
        yield return new object[] { Guid.Empty };
        yield return new object[] { DateTime.MinValue };
     }
}

注意:如果它们都来自同一类型,您也可以使用特定的参数类型而不是object

public void IsValid_WithInvalidInput_ShouldReturnFalse(Guid input)

空实际上是一个变量,你不能在属性中传递变量。表达式必须是常量,尝试传递一个"new Guid()"或违约(Guid)