在NUnit 2.5中使用Lambdas作为约束?

Stu*_*sie 10 c# lambda nunit unit-testing

根据Charlie Poole的NUnit博客,可以在NUnit 2.5中使用Lambda表达式作为约束.我似乎无法让它工作?我使用的是NUnit 2.5.3.9345.

使用博客文章中的示例lambda:

[TestFixture]
public class Class1
{
    [Test]
    public void someTest()
    {
        int[] array = {1, 2, 3, 4};
        Assert.That( array, Is.All.Matches( (x) => x%4 == 0 && x%100 != 0 || x%400 == 0 ));
    }
}
Run Code Online (Sandbox Code Playgroud)

结果在编译器中说:"无法将lambda表达式转换为'NUnit.Framework.Constraints.Constraint'类型,因为它不是委托类型"

程序集的目标框架是.NET Framework 3.5.有什么我愚蠢地做错了吗?

Céd*_*Rup 14

我认为编译器无法处理lambda,因为它无法推断出参数类型.试试这个 :

Assert.That( array, Is.All.Matches( (int x) => x%4 == 0 && x%100 != 0 || x%400 == 0 ));
Run Code Online (Sandbox Code Playgroud)


小智 5

Matches在我使用的 NUnit 版本 (2.5.9) 中,该约束有 3 个重载,其中之一是

public Constraint Matches<T>(Predicate<T> predicate)
Run Code Online (Sandbox Code Playgroud)

因此,如果您在方法调用中传入类型参数,则可能会起作用,如下所示:

Assert.That(array, Is.All.Matches<int>(x => (rest of lambda body)));
Run Code Online (Sandbox Code Playgroud)