2012-05-30 9 views
8

をパラメータ化します。私はそのためNUnitテストを持っている:パスラムダは、私がオーバーロードされた演算子の束を持つクラスを持っている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などの各事業者のためのラムダを渡すことができますか?

答えて

1

あなたはまさにそれを渡すことができます。

MatrixOperatorOperandIsNullThrows((l,r) => l + r); 
+0

私はそれをよりよく呼ぶべきですか? 'TextFixture'のコンストラクタで?私もResharperを使ってテストを実行します。このように扱うことはできますか? –

+0

@ AndreyErmakov:オペレータごとに別のテスト方法です。 – SLaks

20

次の試験は無効となり、すなわち、あなたは即座に、ラムダ式を含むテストケースの属性を適用することはできません。あなたが行うことができます

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

何、しかし、 TestCaseSource属性を次のようにラムダ式の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("TestCases")] 
    public void Test(Func<double, double, double> func) 
    { 
     Assert.GreaterOrEqual(func(1.0, 1.0), 1.0); 
    } 
} 
+0

この非常に便利なアプローチに感謝します。 @SLaksが提供したものを選んだのは、各オペレータのテストをグループ化するのにも役立ったからです。 –

+0

関数だけでなく、他の引数も渡したいのですが? –

+0

プロパティがFunc のクラスを作成し、それ以外の期待値を作成することができます。最後に、新しいクラスのIEnumerableを渡すことができます。 – labilbe

関連する問題