c# - 将 lambda 传递给参数化的 NUnit 测试

标签 c# nunit parameterized

我有一个包含大量重载运算符的类:

public static double[,] operator +(Matrix matrix, double[,] array)
public static double[,] operator -(Matrix matrix, double[,] array)
public static double[,] operator *(Matrix matrix, double[,] array)

对于所有这些,我都想测试操作数是否为空。我有一个 NUnit 测试:

public void MatrixOperatorOperandIsNullThrows(Func<Matrix, double[,], double[,]> op)
{
    Matrix m = null;
    var right = new double[,] {{1, 1}, {1, 1}};
    Assert.Throws<ArgumentException>(() => op(m, right));
}

如何为每个运算符传递 lambda,例如 (l,r) => l + r

最佳答案

您不能立即应用包含 lambda 表达式的 TestCase 属性,即以下测试将无效:

[TestCase((a, b) => a + b)]
public void WillNotCompileTest(Func<double, double, double> func)
{
    Assert.GreaterOrEqual(func(1.0, 1.0), 1.0);
}

但是,您可以将 TestCaseSource 属性与 lambda 表达式的 IEnumerable 一起使用,如下所示:

[TestFixture]
public class TestClass
{
    private IEnumerable<Func<double, double, double>> testCases
    {
        get
        {
            yield return (a, b) => a + b;
            yield return (a, b) => a * b;
            yield return (a, b) => a / b;
        }
    }

    [TestCaseSource(nameof(testCases))]
    public void Test(Func<double, double, double> func)
    {
        Assert.GreaterOrEqual(func(1.0, 1.0), 1.0);
    }
}

关于c# - 将 lambda 传递给参数化的 NUnit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823026/

相关文章:

c# - 使用 WMI 删除远程服务器上的文件

junit - jUnit中的ExpectedException?

python - 参数化类和元类之间有什么区别(请使用 Python 代码示例)?

c# - 向 HTML 表格的奇数行添加备用背景样式

c# - 如何简化单元测试 DDD Value objects Equality with AutoFixture

c# - 通过引用传递数组的修改

c# - NUnit - 默认重试异常

macos - 在命令行上更新 nunit-console

c# - 为什么在这种情况下 CONVERT() 允许我使用参数化查询?

c++ - C++中的动态参数化构造函数问题