site/xunit.analyzers/rules/xUnit1040.md
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? _) { }
}