我有一个包含大量重载运算符的类:
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/