[英]How to mock HttpContext.Current.Items with NUnit and Rhino Mocks
我正在使用NUnit
和RhinoMocks
對(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個:
Guid.Empty
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.