如何使用 NUnit 和 Rhino Mocks 模拟 HttpContext.Current.Items
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
可用于该方法。我怎样才能做到这一点?
另外,如何检查是否添加了项目(我使用什么样的断言can/should)
您根本不需要重构 code\use 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 填充 RequestGUID
- 验证 GUID 不是
Guid.Empty
我正在使用 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
可用于该方法。我怎样才能做到这一点?
另外,如何检查是否添加了项目(我使用什么样的断言can/should)
您根本不需要重构 code\use 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 填充 RequestGUID
- 验证 GUID 不是
Guid.Empty