【问题标题】:Can XUnit handle tests handle class and decimal parameters in the same method?XUnit 可以在同一方法中处理测试处理类和十进制参数吗?
【发布时间】:2015-11-02 10:29:21
【问题描述】:

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

public void TheBigTest(MyClass data, decimal result)
{

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: xunit xunit2


    【解决方案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 类以增强您的测试数据。

    【讨论】:

    • 感谢@Paul 的回答。几个小时前我自己解决了所有问题,但没有更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多