单元测试OnResultExecuted

时间:2013-05-02 10:09:16

标签: asp.net-mvc-3 unit-testing model-view-controller asp.net-mvc-4

有没有人尝试过单元测试OnResultExecuted方法?

我有一个简单的控制器,可以呈现通知消息,然后清除它们。

public class NotificationController : BaseController
    {

        public NotificationController(INotificationMessagesContext notificationMessagesContext)
        {
            Contract.Requires<AppEx.NullArgumentException>(
                notificationMessagesContext != null, "Notification messages context must be set");

            notificationContext = notificationMessagesContext;
        }

        private readonly INotificationMessagesContext notificationContext;

        [ChildActionOnly]
        public PartialViewResult Index()
        {
            return notificationContext == null ? null : PartialView(notificationContext.Messages);
        }


        protected override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            if (notificationContext != null && notificationContext.Messages.Any())
                notificationContext.ClearAll();

            base.OnResultExecuted(filterContext);
        }

    }

单元测试Index()方法没有任何帮助,因为MVC会调用OnResultExecuted。我可以创建一个易于测试的自定义属性,但为此实现自定义属性似乎太过分了。

谢谢

1 个答案:

答案 0 :(得分:1)

就个人而言,我会创建一个内部函数来执行onresultexecuted调用,然后使内部函数可用于使用它们的测试项目。

您可以忽略onresultexecuted然后直接测试内部函数。

以下是如何使内部对另一个项目可见的链接。

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx