2008-10-24 100 views
4

我在RhinoMocks中使用模拟对象来表示调用MessageQueue.GetPublicQueues的类。我想模拟消息队列在工作组模式下运行时引发的异常(这是一个MessageQueueException),以确保我能够正确捕获异常是否可以抛出MessageQueueException?

MessageQueueException没有公共构造函数,只有标准的受保护的构造函数用于异常。有没有从模拟对象/ Expect.Call语句中引发此异常的适当方法?

回答

5

反射会破坏可访问性规则。您的保修无效,.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; 
+0

工程请客:-) – BlackWasp 2008-10-25 09:20:06

3

你可以通过尝试创建一个无效的队列。也许更安全的则正在举行的框架的变化俘虏(通过使用私有/保护的构造函数):

MessageQueue mq = MessageQueue.Create("\\invalid"); 
相关问题