Dre*_*edj 12 c# asp.net-mvc nunit unit-testing moq
我对单元测试非常非常新,我正在尝试为一个非常简单的方法编写测试:
public class myClass : RequireHttpsAttribute
{
public override void OnAuthorization(AuthoizationContext filterContext)
{
var request = filterContext.HttpContext.Request;
var header = Convert.ToBoolean(request.Headers["Special-Header-Name"]);
if (!(header || request.IsSecureConnection))
{
HandleNonHttpsRequest(filterContext);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个方法继承自RequireHttpsAttribute,检查页面是否存在某个标题,如果它丢失或为假,并且页面不安全,那么它将调用HandleNonHttpsRequest,否则它什么都不做.
我们正在使用Moq和Nunit进行测试.我找到了一些资源来帮助用Moq构建一个fakeHttpContext,但说实话,我不确定如何使用它或在我的单元测试中去哪里以确保假的HttpContexts是或不是导致该HandleNonHttpsRequest方法调用.
我真的很感激这个问题的任何指导.
Dar*_*rov 20
// arrange
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
var headers = new NameValueCollection
{
{ "Special-Header-Name", "false" }
};
request.Setup(x => x.Headers).Returns(headers);
request.Setup(x => x.HttpMethod).Returns("GET");
request.Setup(x => x.Url).Returns(new Uri("http://www.example.com"));
request.Setup(x => x.RawUrl).Returns("/home/index");
context.Setup(x => x.Request).Returns(request.Object);
var controller = new Mock<ControllerBase>();
var actionDescriptor = new Mock<ActionDescriptor>();
var controllerContext = new ControllerContext(context.Object, new RouteData(), controller.Object);
var filterContext = new AuthorizationContext(controllerContext, actionDescriptor.Object);
var sut = new myClass();
// act
sut.OnAuthorization(filterContext);
// assert
Assert.IsInstanceOfType(filterContext.Result, typeof(RedirectResult));
var redirectResult = (RedirectResult)filterContext.Result;
Assert.AreEqual("https://www.example.com/home/index", redirectResult.Url);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15657 次 |
| 最近记录: |