Gab*_*abe 5 asp.net asp.net-mvc unit-testing moq
我正在使用Moq进行单元测试,我想测试一个视图的属性.在这种情况下,授权属性.
示例查看代码:
[Authorize(Roles = "UserAdmin")]
public virtual ActionResult AddUser()
{
// view logic here
return View();
}
Run Code Online (Sandbox Code Playgroud)
因此,当我使用UserAdmin角色的用户和不属于用户admin角色的用户对此视图执行操作时,我想测试view属性.反正有没有这样做?
示例测试:
[Test]
public void Index_IsInRole_Customer()
{
// Arrange
UserAdminController controller = _controller;
rolesService.Setup(r => r.IsUserInRole(It.IsAny<string>(), It.IsAny<string>())).Returns(false); // return false for any role
// Act
var result = controller.AddUser();
// Assert
Assert.IsNotNull(result, "Result is null");
}
Run Code Online (Sandbox Code Playgroud)
属性只是类型的元数据,因此它们不会做任何事情,除非周围的基础设施使它们做某事(或者更好的是:周围的基础设施根据这些属性中的信息做某事).这就是ASP.NET MVC框架在执行请求时所执行的操作.
这不是您在单元测试中创建和调用Controller Action时所执行的操作,因此除非您想要使用ControllerActionInvoker来调用Controller Action(此时测试不再是单元测试并且变为集成测试)您无法直接测试属性隐含的行为.
但是,您可以编写一个单元测试来验证属性是否正确地修饰了Controller Action:
var attributes = typeof(UserAdminController)
.GetMethod("AddUser").GetCustomAttributes(true);
var result = attributes.OfType<AuthorizeAttribute>().Single();
Assert.AreEqual("UserAdmin", result.Roles);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1300 次 |
| 最近记录: |