如何通过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)
{
}
在这种情况下,使用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)