0

我有一个带有以下签名的测试方法:

public void TheBigTest(MyClass data, decimal result)
{

我想在 XUnit 2.1 中运行它。我已经设置了我的 CalculationData 类,如果我删除第二个参数,它就可以工作。但是当我尝试通过执行以下操作将预期结果作为第二个参数传递时:

[Theory, ClassData(typeof(CalculationData)), InlineData(8893)]

它不起作用。测试失败并显示:

测试方法需要 2 个参数值,但提供了 1 个参数值。

有任何想法吗?

4

1 回答 1

1

属性中指定的类ClassData需要是一个可枚举类,它返回测试方法的所有参数,而不仅仅是第一个参数。

因此,在您的示例中,您需要以下内容:

public class CalculationData : IEnumerable<object[]>
{
    IEnumerable<object[]> parameters = new List<object[]>()
    {
        new object[] { new MyClass(), 8893.0m },
        new object[] { new MyClass(), 1234.0m },
        // ... other data...
    };

    public IEnumerator<object[]> GetEnumerator()
    {
        return parameters.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

然后,您可以将参数添加到您的MyClass类以增强您的测试数据。

于 2015-11-02T13:22:40.173 回答