2008-10-24 6 views
4

J'utilise un objet fantaisie dans RhinoMocks pour représenter une classe qui fait des appels à MessageQueue.GetPublicQueues. Je souhaite simuler l'exception levée lorsque la mise en file d'attente des messages fonctionne en mode groupe de travail, MessageQueueException, pour garantir que j'obtiens correctement l'exceptionEst-il possible de lancer une exception MessageQueueException?

La MessageQueueException n'a pas de constructeur public, seul le constructeur protégé standard pour une exception. Existe-t-il un moyen approprié de jeter cette exception à partir de l'instruction mock object/Expect.Call?

Répondre

5

La réflexion peut casser la règle d'accessibilité. Vous annulera la garantie, une mise à jour .NET peut facilement casser votre code. Essayez ceci:

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

fonctionne un régal :-) – BlackWasp

+0

Maintenant, rappelez-vous fait parce que chaque fois qu'ils patch ou mettre à jour le cadre, il peut être une rupture changer ... été là dans un système de prod avant. ça craint. Pourquoi avez-vous besoin de jeter cette exception? Ne pourriez-vous pas aussi faire quelque chose d'invalide avec un MessageQueue pour l'obtenir ?! – TheSoftwareJedi

3

Vous pouvez provoquer cela en essayant de créer une file d'attente invalide. Probablement plus sûr captive détenus alors par des changements cadres (en utilisant par les constructeurs privés/protégées):

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