我正在测试当前项目中的控制器操作。有一种方法可以模拟登录的用户,因此我可以控制其中一种方法,而我忘记了模拟用户,我很惊讶,而没有得到重定向(当您处于非匿名状态时,为非匿名操作定义了行为)未记录),则操作执行完美。我进行了调试,发现没有调用OnAuthorization方法(我的所有控制器都继承自一个覆盖它的自定义控制器。
这是违规测试:
[TestMethod]
public void GetOffersUserCanImprove()
{
ContractsController controller = new ContractsController();
ViewResult result = controller.ReceivingImprovements() as ViewResult;
Assert.IsNotNull(result, "No se pudo acceder a la página de recibir mejoras.");
}
和自定义控制器(它在运行应用程序时完美地调用了该方法,只是在测试时跳过了该方法):
public class MiComunidadController : Controller
{
protected LoginManager loginManager = LoginManager.EnviromentalFactory();
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
// Rest of security stuff, non relevant, the execution never
// reaches this point.
}
}
关于为什么会发生这种情况以及如何使测试控制器遵循其生命周期的任何提示?
这是我期望的单元测试行为,您正在单独测试控制器操作。如果要一起测试授权过程和操作,则将形成集成测试,并且将需要Web托管环境来容纳mvc的整个Web生命周期。
我测试此方法的方法是测试操作,然后进行测试以检查属性的存在,如果有人删除或更改了该属性,则可能会警告您他们可能引入了意外的行为。
然后,您也可以隔离地测试您的授权属性,因此您知道它独立于控制器操作而工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句