簡體   English   中英

如何使用NUnit和Rhino Mocks模擬HttpContext.Current.Items

[英]How to mock HttpContext.Current.Items with NUnit and Rhino Mocks

我正在使用NUnitRhinoMocks對(WebApi)項目進行單元測試。

我正在嘗試編寫一種測試方法,應該為HttpContext.Current.Items添加一個項目。

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

我不知道從測試方法中運行時如何使HttpContext.Current.Items可用於該方法。 我該如何實現?

另外,如何檢查是否已添加項目(我可以/應該使用哪種斷言)

您不需要重構代碼\\完全使用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. 驗證使用GUID填充RequestGUID
  2. 驗證GUID不是Guid.Empty

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM