【发布时间】:2012-05-23 03:29:53
【问题描述】:
我正在使用 NUnit 对 C# 中的私有方法进行单元测试。
例如,我的方法(如果公开)预计会抛出 ArgumentNullException。我可以断言该方法会像这样抛出ArgumentNullException:Assert.Throws<ArgumentNullException>(() => method.Call());
但是,由于我使用反射调用私有方法,因此我会为抛出 ArgumentNullException 的方法断言 TargetInvocationException,如下所示:Assert.Throws<TargetInvocationException>(() => methodInfo.Invoke(obj, new object[] { params }));
我想为该私有方法声明一个ArgumentNullException 而不是TargetInvocationException,这样我就可以扫描它的代码并知道它期望做什么,而不是通过调试来找出答案。
我将如何断言实际异常,而不是 TargetInvocationException?
注意: 这个问题没有解决单元测试公共与私有方法背后的理论。我和我的团队已经决定对私有方法进行单元测试,这是否是单元测试的方式与这个问题无关。请参阅this 问题上最受好评的答案以了解我们的基本原理。
【问题讨论】:
-
这是否是一个好主意是一回事,但您能检查一下
InnerException属性吗? -
感谢@GeorgeDuckett 引导我朝着正确的方向前进。
标签: c# exception nunit assert private-methods