我正在使用 NUnit 对 C# 中的私有方法进行单元测试。
例如,我的方法(如果是公开的)预计会抛出一个ArgumentNullException
. 我可以断言该方法会抛出ArgumentNullException
这样的问题:Assert.Throws<ArgumentNullException>(() => method.Call());
但是,由于我正在使用反射调用私有方法,因此我会TargetInvocationException
为抛出ArgumentNullException
类似这样的方法声明一个:Assert.Throws<TargetInvocationException>(() => methodInfo.Invoke(obj, new object[] { params }));
我想为那个私有方法断言一个ArgumentNullException
而不是一个TargetInvocationException
,这样我就可以扫描它的代码并知道它期望做什么,而不是通过调试来找出答案。
我将如何断言实际异常,而不是TargetInvocationException
?
注意:这个问题没有解决单元测试公共与私有方法背后的理论。我和我的团队已经决定对私有方法进行单元测试,这是否是单元测试的方式与这个问题无关。请参阅此问题上最受好评的答案以了解我们的基本原理。