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)