Edit on GitHub

xUnit1046   v2 v3   Info

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:

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());
    }
}
Copyright © .NET Foundation. Contributions welcomed at https://github.com/xunit/xunit/tree/gh-pages.