使用.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()方法,但从不调用它们。
我应该在单元测试中以另一种方式调用控制器方法吗?
答案 0 :(得分:0)
我最终将以下代码添加到 PersonController
private IDocumentSession _RavenSession = null;
public IDocumentSession RavenSession
{
get
{
return _RavenSession ?? base.RavenSession;
}
set
{
_RavenSession = value;
}
}
现在,当我在单元测试中实例化控制器时,我可以创建一个新会话。我得到一个警告,我正在隐藏一个继承的成员,但它工作正常。