ElmahのErrorSignalルーチンをモックするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1019833

  •  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つのオプションがあります。

  1. 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ではないため、例外がスローされなくなります。

  2. Raiseの呼び出しを囲むラッパークラスを作成し、ラッパークラスをモックアウトします。

    public class ErrorSignaler {
    
        public virtual void SignalFromCurrentContext(Exception e) {
            if (HttpContext.Current != null)
                Elmah.ErrorSignal.FromCurrentContext().Raise(e);
        } 
    }
    
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top