我在 RhinoMocks 中使用一个模拟对象来表示一个调用 MessageQueue.GetPublicQueues 的类。我想模拟消息队列在工作组模式下运行时抛出的异常,即MessageQueueException,以确保我正确捕获异常

MessageQueueException 没有公共(public)构造函数,只有异常的标准 protected 构造函数。是否有适当的方法可以从模拟对象/Expect.Call 语句中抛出此异常?

最佳答案

反射可以打破可访问性规则。您将使保修失效,.NET 更新很容易破坏您的代码。试试这个:

using System.Reflection;
using System.Messaging;
...
        Type t = typeof(MessageQueueException);
        ConstructorInfo ci = t.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance,
          null, new Type[] { typeof(int) }, null);
        MessageQueueException ex = (MessageQueueException)ci.Invoke(new object[] { 911 });
        throw ex;

10-07 16:59