【发布时间】:2025-12-22 06:05:08
【问题描述】:
在我的 MVC 项目中,我必须设置一个控制器类属性:
public class ResponsableAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
var controller = (BaseController)filterContext.Controller;
if (!controller.EstResponsable)
{
filterContext.Result = controller.RedirectionForcee(Alertage.Information, ConstantesUi.Misc.MessageResponsable);
}
}
}
请耐心等待,代码是法语:
[Responsable]
public class ParamLivraisonController : BaseController
所以每个动作在执行之前都必须通过属性,这是预期的行为。
但我不知道如何对这个属性进行单元测试,将返回值设置为 false,以便 controller.RedirectionForcee(返回 RedirectToRouteResult)真正发挥作用。
如果我调用任何控制器方法:
[TestMethod]
public void ParamLivraisonController_GererLivraison_Get()
{
ControleurAsynchrone.ObtenirLivraisons().Returns(ObtenirListeLivraison());
var retour = _ctrl.GererLivraisons();
Assert.IsNotNull(retour);
}
该属性未命中或测试。怎么能测试呢?我正在使用 nSubstitute 和 mvcFakes,但我不知道如何替换 ActionExecutingContext。
【问题讨论】:
-
隔离的单元测试的主题应该是属性。创建一个您控制的上下文并将其传递给
OnActionExecuting并断言所需的行为。否则,创建一个内存集成测试,它将在运行时端到端调用操作,其中还包括属性。 -
有趣!你介意举个例子吗?
-
@KennethK。甚至不知道这是可能的。 :|
标签: c# unit-testing asp.net-mvc-5