ElmahのErrorSignalルーチンをモックするにはどうすればよいですか?
-
06-07-2019 - |
質問
ASP.Net MVC c#アプリケーションおよびキャッチされた例外のエラーを処理するためにELMAHを使用しています。
ErrorSignal.FromCurrentContext().Raise(exception);
しかし、キャッチされた例外を単体テストしようとすると、次のメッセージが表示されます:
System.ArgumentNullException: Value cannot be null.
Parameter name: context
FromCurrentContext()呼び出しをモックするにはどうすればよいですか? 代わりにすべきことは他にありますか?
FYI ...現在MoqとRhinoMocksを使用しています。
ありがとう!
解決
FromCurrentContext()
メソッドは静的メソッドであるため、呼び出しを単純にモックすることはできません。他にも2つのオプションがあります。
-
FromCurrentContext()
は内部でHttpContext.Current
を呼び出すため、その中に偽のコンテキストをプッシュできます。例:SimpleWorkerRequest request = new SimpleWorkerRequest( "/blah", @"c:\inetpub\wwwroot\blah", "blah.html", null, new StringWriter()); HttpContext.Current= new HttpContext(request);
これにより、
HttpContext.Current
がnullではないため、例外がスローされなくなります。 -
Raiseの呼び出しを囲むラッパークラスを作成し、ラッパークラスをモックアウトします。
public class ErrorSignaler { public virtual void SignalFromCurrentContext(Exception e) { if (HttpContext.Current != null) Elmah.ErrorSignal.FromCurrentContext().Raise(e); } }
所属していません StackOverflow