v2
v3
Info
xUnit1046
"Avoid using TheoryDataRow arguments that are not serializable"
Cause
A violation of this rule occurs when a value passed to the TheoryDataRow
constructor is known to
not be serializable.
Reason for rule
Non-serializable data makes it impossible for the developer to run individual data rows inside of Visual Studio's Test Explorer.
How to fix violations
To fix a violation of this rule, use data that is known to be serializable. This includes all the
supported built-in types (listed below) or any type which implements IXunitSerializable
, as well as
arrays of any supported type and nullable versions of any supported value type.
Supported built-in types (as of v3 0.1.1-pre.392
) include:
BigInteger
bool
byte
andsbyte
char
DateTime
,DateTimeOffset
, andTimeSpan
DateOnly
andTimeOnly
(.NET 8+ only)- Enum values (unless you're using .NET Framework and they live in the GAC)
decimal
float
anddouble
int
anduint
long
andulong
short
andushort
string
Type
Additional built-in types supported for v3 (as of 0.5.0
) include:
Guid
Index
andRange
(.NET 8+ only)Uri
Version
Examples
Violates
using Xunit;
public sealed class TestData { }
public class MyClass
{
public TheoryDataRow GetDataRow()
{
return new TheoryDataRow(new TestData());
}
}
Does not violate
using Xunit;
public sealed class TestData { }
public class MyClass
{
public TheoryDataRow GetDataRow()
{
return new TheoryDataRow(42, "Hello World!");
}
}
using Xunit;
using Xunit.Sdk;
public sealed class TestData : IXunitSerializable { }
public class MyClass
{
public TheoryDataRow GetDataRow()
{
return new TheoryDataRow(new TestData());
}
}