Ada*_*m T 3 c# unit-testing c#-7.0
我一直在看一些关于本地函数的文章,一句话说:
局部函数在方法中定义,不在其外部
所以鉴于下面的代码示例,是否有任何方法对该square方法进行单元测试?
int SumAndSquare(int x, int y)
{
var sum = x + y;
return square(sum);
int square(int z)
{
return z * z;
}
}
Run Code Online (Sandbox Code Playgroud)
一般而言,您无法以可维护的方式处理非平凡的本地函数(在对此响应的注释中进行了解释).使用定义它的方法的变量的局部函数(所以一个非平凡的,不使用局部变量的变量可能是私有方法)有一个包含这些变量的特殊参数.您无法轻松重新创建此参数→您无法调用它.
在TryRoslyn中可以很容易地看到它(我多么喜欢TryRoslyn!我经常使用它)
int Foo()
{
int b = 5;
return valueofBplusX(5);
int valueofBplusX(int x)
{
return b + x;
}
}
Run Code Online (Sandbox Code Playgroud)
翻译成如下:
[CompilerGenerated]
[StructLayout(LayoutKind.Auto)]
private struct <>c__DisplayClass0_0
{
public int b;
}
private int Foo()
{
C.<>c__DisplayClass0_0 <>c__DisplayClass0_ = default(C.<>c__DisplayClass0_0);
<>c__DisplayClass0_.b = 5;
return C.<Foo>g__valueofBplusX0_0(5, ref <>c__DisplayClass0_);
}
[CompilerGenerated]
internal static int <Foo>g__valueofBplusX0_0(int x, ref C.<>c__DisplayClass0_0 ptr)
{
return ptr.b + x;
}
Run Code Online (Sandbox Code Playgroud)
你看到<>c__DisplayClass0_0它包含b局部变量,并<Foo>g__valueofBplusX0_0作为第二个参数接收a ref C.<>c__DisplayClass0_0 ptr?
最重要的是,我将添加Keith Nicholas的引用:是的,不要测试私有方法....单元测试的想法是通过其公共'API'测试单元.
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |