2017-07-21 11 views
1

(WebApi)プロジェクトの単体テストにはNUnitRhinoMocksを使用しています。HttpContext.Current.ItemsをNUnitとRhino Mockでモックする方法

HttpContext.Current.Itemsに項目を追加することになっているテスト用のメソッドがあります。

public override void OnActionExecuting(HttpActionContext actionContext) 
{ 
    HttpContext.Current.Items.Add("RequestGUID", Guid.NewGuid()); 
    base.OnActionExecuting(actionContext); 
} 

私は、テストメソッド内から実行したとき、私はこの方法にHttpContext.Current.Itemsを利用できるようにすることができますか見当がつかない。どうすればこれを達成できますか?

また、項目が追加されている場合どのように私は(アサーションの種類は/私が使用する必要がありますすることができます)を確認することができます

+0

あなたはそのコードをリファクタリングできますか? 'HttpContext'と緊密に結合されているため、テストするのが非常に難しく、避けるべきです。 – Nkosi

+0

はい私はそうです。何を指示してるんですか?私は単純にHttpContextをダミー/空のクラス、あるいは何かにラップしますか? – Eedoh

+0

これはどのバージョンのasp.netです。 MVC5 ?, WEB API 2?そのメソッドがどこから来たのか、より多くのコンテキストが必要になる – Nkosi

答えて

2

あなたはそれをテストするために、すべてのコードの\使用RhinoMocksをリファクタリングする必要はありません。

あなたのUTは、次の例のようになります

[Test] 
public void New_GUID_should_be_added_when_OnActionExecuting_is_executing() 
{ 
    //arrange section: 
    const string REQUEST_GUID_FIELD_NAME = "RequestGUID"; 

    var httpContext = new HttpContext(
     new HttpRequest("", "http://google.com", ""), 
     new HttpResponse(new StringWriter()) 
    ); 

    HttpContext.Current = httpContext; 

    //act: 
    target.OnActionExecuting(new HttpActionContext()); 

    //assert section: 
    Assert.IsTrue(HttpContext.Current.Items.Contains(REQUEST_GUID_FIELD_NAME)); 
    var g = HttpContext.Current.Items[REQUEST_GUID_FIELD_NAME] as Guid?; 
    if (g == null) 
    { 
     Assert.Fail(REQUEST_GUID_FIELD_NAME + 
        " is not a GUID, it is :: {0}", 
        HttpContext.Current.Items[REQUEST_GUID_FIELD_NAME]); 
    } 
    Assert.AreNotEqual(Guid.Empty, g.Value); 
} 

ところで、あなたは2に、このテストを分割することができます:

  1. はRequestGUIDはGUID
  2. が移入されていることを確認しますGUIDがGUIDでないことを確認しますGuid.Empty
+0

です。これは魅力的に機能しました。まったく嘲笑する必要はありません。すばらしいです。ありがとう! – Eedoh

+0

これはおそらく別の質問です。しかし、どうすれば私はHttpContext.Current.GetOwinContext()を嘲笑に行くだろう。Request.Context :)? – Eedoh

+0

@Eedohちょうど正直言って私はもはや.netの世界に2年以上はいません...だから、新しい質問を投稿する方がはるかに良いと思う...私は他の答えを見た完全に間違っていたので、私は答えを加えなければならなかった....そうでなければ、私は投票して、続けるだろう.... –

関連する問題