Cal*_*nus 1 c# pex nullreferenceexception
我正在玩Pex和Moles,在运行Pex之后发现几乎Pex所说的所有测试都失败了,因为NullReferenceExceptions是"允许的".阅读Pex文档,我发现了以下内容:
如果较高级别的组件将格式错误的数据传递给较低级别组件(较低级别组件拒绝)的较低级别组件,则应首先阻止较高级别组件执行此操作.
所以上面提到的是我们应该在使用类似的东西调用其他方法/类之前测试空值:
if(foo == null)
throw new ArgumentNullException("its null and this shouldn't happen")
else
Bar(foo); //won't get a null reference exception here because we checked first...
Run Code Online (Sandbox Code Playgroud)
恕我直言,检查全部空值对性能和代码臃肿的原因没有多大吸引力,但我想听听其他人不得不说的话......
是的,您应该在使用它们之前验证您的参数,IMO.
NullReferenceException应该在使用意外的空值时发生.永远不应该明确地抛出它,并指出最终抛出它的方法级别或者它被调用的东西的问题.
ArgumentNullException指示的方法的缺陷早在比方法把它扔调用堆栈.(通常,但并非总是如此,直接来电者.)
抛出一个表示问题的异常越早,就越容易确定空值首先进入的位置,并且 "坏数据"在其他地方产生令人讨厌的影响的可能性越小(例如,覆盖文件准备好在实现数据实际为空之前将数据写入其中.
如果你在,你怎么称呼你的内部或私有方法有信心,也可适当不执行检查存在,但对于公有方法,我相信参数验证是几乎总是合适的.
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |