The type argument to theory data is nullable, while the type of the corresponding test method parameter is not
The TheoryData
or TheoryDataRow
type argument is marked as nullable, and the test method argument is marked as non-nullable.
Passing null
data to a test method that isn’t expecting it could cause runtime errors or unpredictable test results
(either false positives or false negatives).
To fix a violation of this rule, either make the theory data type non-nullable, or make the test method parameter nullable.
TheoryData<>
(for v2 and v3)using Xunit;
public class xUnit1040
{
public static TheoryData<string?> PropertyData =>
new() { "Hello", "World", default(string) };
[Theory]
[MemberData(nameof(PropertyData))]
public void TestMethod(string _) { }
}
TheoryDataRow<>
(for v3 only)using System.Collections.Generic;
using Xunit;
public class xUnit1040
{
public static IEnumerable<TheoryDataRow<string?>> PropertyData =>
[new("Hello"), new("World"), new(null)];
[Theory]
[MemberData(nameof(PropertyData))]
public void TestMethod(string _) { }
}
using System.Collections;
using System.Collections.Generic;
using Xunit;
public class ClassRowData : IEnumerable<TheoryDataRow<string?>>
{
public IEnumerator<TheoryDataRow<string?>> GetEnumerator()
{
yield return new("Hello");
yield return new("World");
yield return new(null);
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
public class xUnit1040
{
[Theory]
[ClassData(typeof(ClassRowData))]
public void TestMethod(string _) { }
}
TheoryData<>
(for v2 and v3)using Xunit;
public class xUnit1040
{
public static TheoryData<string> PropertyData =>
new() { "Hello", "World" };
[Theory]
[MemberData(nameof(PropertyData))]
public void TestMethod(string _) { }
}
using Xunit;
public class xUnit1040
{
public static TheoryData<string?> PropertyData =>
new() { "Hello", "World", default(string) };
[Theory]
[MemberData(nameof(PropertyData))]
public void TestMethod(string? _) { }
}
TheoryDataRow<>
(for v3 only)using System.Collections.Generic;
using Xunit;
public class xUnit1040
{
public static IEnumerable<TheoryDataRow<string>> PropertyData =>
[new("Hello"), new("World")];
[Theory]
[MemberData(nameof(PropertyData))]
public void TestMethod(string _) { }
}
using System.Collections.Generic;
using Xunit;
public class xUnit1040
{
public static IEnumerable<TheoryDataRow<string?>> PropertyData =>
[new("Hello"), new("World"), new(null)];
[Theory]
[MemberData(nameof(PropertyData))]
public void TestMethod(string? _) { }
}
using System.Collections;
using System.Collections.Generic;
using Xunit;
public class ClassRowData : IEnumerable<TheoryDataRow<string>>
{
public IEnumerator<TheoryDataRow<string>> GetEnumerator()
{
yield return new("Hello");
yield return new("World");
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
public class xUnit1040
{
[Theory]
[ClassData(typeof(ClassRowData))]
public void TestMethod(string _) { }
}
using System.Collections;
using System.Collections.Generic;
using Xunit;
public class ClassRowData : IEnumerable<TheoryDataRow<string?>>
{
public IEnumerator<TheoryDataRow<string?>> GetEnumerator()
{
yield return new("Hello");
yield return new("World");
yield return new(null);
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
public class xUnit1040
{
[Theory]
[ClassData(typeof(ClassRowData))]
public void TestMethod(string? _) { }
}