2009-09-06 4 views
2

J'ai vu cet article mais je suis un peu confus.Comment maquiller Elmah?

How can I mock Elmah's ErrorSignal routine?

Je cherche à l'option 2

Create a wrapper class around the call to Raise and just mock out the wrapper class. 

public class ErrorSignaler { 

public virtual void SignalFromCurrentContext(Exception e) { 
    if (HttpContext.Current != null) 
     Elmah.ErrorSignal.FromCurrentContext().Raise(e); 
} 

} 

Je suis un peu confus mais par le fait que cela ne semble pas implémenter une interface et je ne suis pas vraiment sûr pourquoi il semble être en place pour une sorte d'héritage.

Merci

Répondre

2

L'idée ici est que vous utilisez la classe ErrorSignaler dans votre code pour signaler une erreur au lieu d'invoquer Elmah directement. Lorsque vous exécutez votre code dans des tests unitaires, car HttpContext.Current est null, le composant Elmah ne sera pas utilisé et il n'y aura aucune exception de référence nulle.

Vous pouvez également créer une interface ErrorSignaler:

public interface IErrorSignaler 
{ 
    void SignalFromCurrentContext(Exception e); 
} 

De cette façon, la mise en œuvre utilisée pour la mise en œuvre IErrorSignaler peut être moqué dans les tests unitaires, si nécessaire.

+0

Ya c'est ce que j'ai fini par faire alors je me suis moqué. Je me demandais juste que le gars avait "Virtual" – chobo2

+0

Cela lui permettrait de sous-classer le ErrorSignaler pour ajouter encore plus de comportement à la méthode 'Signal'. Cette flexibilité pourrait être utile dans certaines situations. –