DynamicData-无法将静态方法移至另一个类(即使是基类)

时间:2019-07-17 12:05:06

标签: c# unit-testing mstest

我正在开发https://www.meziantou.net/mstest-v2-data-tests.htm#using-dynamicdata中所述的动态数据测试(c#)。

通过将动态数据测试和静态方法都放在同一个类中,然后一切正常,但是当尝试将静态类移动到另一个类(甚至是基础类)时,该测试无法运行,我收到错误消息:

消息:值不能为null。 参数名称:方​​法GetData

可以请您帮忙吗?

将方法移至另一个类时,我也尝试将其设置为非静态,但这无济于事。

[TestClass]
public class MathTests
{
    [DataTestMethod]
    [DynamicData(nameof(GetData), DynamicDataSourceType.Method)]
    public void Test_Add_DynamicData_Method(int a, int b, int expected)
    {
        var actual = MathHelper.Add(a, b);
        Assert.AreEqual(expected, actual);
    }

    public static IEnumerable<object[]> GetData()
    {
        yield return new object[] { 1, 1, 2 };
        yield return new object[] { 12, 30, 42 };
        yield return new object[] { 14, 1, 15 };
    }
}

1 个答案:

答案 0 :(得分:1)

对包含包含目标数据源的类型的属性使用备用构造函数

例如

[TestClass]
public class MathTests
{
    [DataTestMethod]
    [DynamicData(nameof(ExternalClass.GetData), typeof(ExternalClass), DynamicDataSourceType.Method)]
    public void Test_Add_DynamicData_Method(int a, int b, int expected)
    {
        var actual = MathHelper.Add(a, b);
        Assert.AreEqual(expected, actual);
    }

}

public class ExternalClass
{
    public static IEnumerable<object[]> GetData()
    {
        yield return new object[] { 1, 1, 2 };
        yield return new object[] { 12, 30, 42 };
        yield return new object[] { 14, 1, 15 };
    }
}