.net MVC 4 RavenDB单元测试控制器OnActionExecuting not firing

时间:2013-04-29 22:35:16

标签: asp.net-mvc unit-testing controller abstract-class ravendb

使用.Net MVC 4,RavenDB,MSTest。

我按照RavenDB文档创建了一个抽象控制器类,它在OnActionExecuting()中创建了RavenSession,并将数据保存在OnActionExecuted()中。

我正在尝试对我的控制器进行单元测试,但OnActionExecuting()和OnActionExecuted()方法永远不会触发。这意味着永远不会创建会话,并且我无法访问数据库 - 因此单元测试失败。

在单元测试中,我按如下方式调用控制器方法:

PersonController controller = new PersonController();            
JsonResult result = controller.GetPerson("people/1");

PersonController.GetPerson 会触发,但是当RavenSession没有值时会很快发生错误(它应该在上面提到的抽象类方法中实例化)。

PersonController 派生自抽象类 RavenController Raven Controller 定义了OnActionExecuting()和OnActionExecuted()方法,但从不调用它们。

我应该在单元测试中以另一种方式调用控制器方法吗?

1 个答案:

答案 0 :(得分:0)

我最终将以下代码添加到 PersonController

 private IDocumentSession _RavenSession = null;
    public  IDocumentSession RavenSession
    {
        get
        {
            return _RavenSession ?? base.RavenSession;
        }
        set
        {
            _RavenSession = value;
        }
    }

现在,当我在单元测试中实例化控制器时,我可以创建一个新会话。我得到一个警告,我正在隐藏一个继承的成员,但它工作正常。