3
votes

I'm attempting to pass Guid.Empty into my unit test:

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

}

However the compiler is complaining:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

How do I pass Guid.Empty into my unit test method?

I've also tried to factor it out by declaring it as a private member in the class, with the same compiler error:

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

        }
2

2 Answers

13
votes

In this situation use the TestCaseSource atribute to define the list of cases.

static Guid?[] NullAndEmptyGuid = new Guid?[] { null, Guid.Empty };

[TestCaseSource("NullAndEmptyGuid")]
public void When_AccountGuid_IsNullOrEmpty_AddError_Is_Invoked(Guid? accountGuid)
{

}
-2
votes

Empty is a variable actually and you can not pass variables in attributes. Expressions are required to be constants, try to pass a "new Guid()" OR default(Guid)