我在 RhinoMocks 中使用一个模拟对象来表示一个调用 MessageQueue.GetPublicQueues 的类。我想模拟消息队列在工作组模式下运行时抛出的异常,即MessageQueueException,以确保我正确捕获异常
MessageQueueException 没有公共构造函数,只有标准的受保护异常构造函数。有没有合适的方法从模拟对象/Expect.Call 语句中抛出这个异常?
我在 RhinoMocks 中使用一个模拟对象来表示一个调用 MessageQueue.GetPublicQueues 的类。我想模拟消息队列在工作组模式下运行时抛出的异常,即MessageQueueException,以确保我正确捕获异常
MessageQueueException 没有公共构造函数,只有标准的受保护异常构造函数。有没有合适的方法从模拟对象/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;
您可以通过尝试创建无效队列来导致此问题。可能比被框架更改俘虏更安全(通过使用私有/受保护的构造函数):
MessageQueue mq = MessageQueue.Create("\\invalid");