Можно ли сгенерировать исключение MessageQueueException? - PullRequest
4 голосов
/ 25 октября 2008

Я использую фиктивный объект в RhinoMocks для представления класса, который делает вызовы MessageQueue.GetPublicQueues. Я хочу смоделировать исключение, которое выдается, когда очередь сообщений работает в режиме рабочей группы, то есть MessageQueueException, чтобы убедиться, что я правильно перехватываю исключение

MessageQueueException не имеет открытого конструктора, только стандартный защищенный конструктор для исключения. Есть ли подходящий способ выбросить это исключение из оператора фиктивного объекта / Expect.Call?

Ответы [ 2 ]

5 голосов
/ 25 октября 2008

Отражение может нарушить правило доступности. Вы аннулируете гарантию , обновление .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;
3 голосов
/ 17 ноября 2008

Вы можете вызвать это, пытаясь создать недопустимую очередь. Вероятно, безопаснее оставаться в плену из-за изменений в структуре (с помощью частных / защищенных конструкторов):

MessageQueue mq = MessageQueue.Create("\\invalid");
...