15

私はオーバーロードされた演算子の束を持つクラスを持っています:

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

それらすべてについて、null のオペランドをテストしたいと思います。私はそのための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));
}

のような各演算子にラムダを渡すにはどうすればよい(l,r) => l + rですか?

4

2 に答える 2

32

ラムダ式を含む TestCase 属性をすぐに適用することはできません。つまり、次のテストは無効になります。

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

ただし、次のように、ラムダ式の IEnumerable と一緒に TestCaseSource 属性を使用することができます。

[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);
    }
}
于 2012-05-30T20:38:55.070 に答える
1

まさにそれを渡すことができます:

MatrixOperatorOperandIsNullThrows((l,r) => l + r);
于 2012-05-30T19:36:23.617 に答える