写代码的一个好习惯是做好单元测试,不仅测试public类及函数,有时候还需要测试private的类及函数,通过.Net单元测试自带的PrivateObject类可以实现,方法很简单,测试函数通过PrivateObject.Invoke,测试属性或变量通过PrivateObject.SetFieldOrProperty即可。但是,如果测试包含返回参数的函数就没法直接通过PrivateObject.Invoke函数,而是通过声明delegate的方式来实现。
例如,需要向某个固定长度的文件写数据,超过限定长度后循环写数据,写完数据后需要获得当前数据长度,起始数据所在位置,除Write函数自身返回数据长度,还需要通过参数返回起始数据所在位置,请看参考代码
.
delegate int WriteDeletate(byte[] data, ref int offset)