我试图围绕表达有力的成员特征的概念进行讨论。
我在互联网上找到的基本示例非常清楚,但是我遇到了这段特定的代码,我不知道它的确切含义:
Assert.Throws<DivideByZeroException>(() => calculator.Divide(5, 0));
上面的示例来自一本有关TDD技术的书,这就是为什么您可以看到Assert类的原因。 Divide方法应该抛出DivideByZeroException
,现在我们对此进行测试。
令人困惑的部分是() => calculator.Divide(5, 0)
。
有人可以解释一下那里到底发生了什么吗? Divide函数的结果将包含空括号吗?
答案 0 :(得分:7)
这本身不是表达强壮的成员本身。这是一个 lambda表达式。 Lambda已添加到C#3;表达式主体成员功能在以后添加,并且设计为类似于lambda语法。
你会想到的
Assert.Throws<DivideByZeroException>(() => calculator.Divide(5, 0));
像
class Whatever
{
static double SomeFunction() => calculator.Divide(5, 0);
...
... later
Func<double> f = SomeFunction;
Assert.Throws<DivideByZeroException>(f);
这是否更清楚?
简而言之:Assert.Throws
接受一个函数,它调用该函数,并验证该函数引发了异常 。至关重要的是,它必须具有可以被称为的函数。你不能只是说
Assert.Throws<Whatever>(calculator.Divide(5, 0))
因为在之前 Throws
被抛出!