在assert中进行验证时,似乎没有调用模拟MVC会话及其方法

时间:2018-03-05 15:50:01

标签: c# asp.net-mvc unit-testing nunit

我在教程here中跟踪了在http上下文中的模拟会话

我设置如下:

var session = new Mock<SessionStateBase>();
session.Setup(s=>s.Clear());

然后添加上下文

context.Setup(c=>c.Session).Returns(session.Object);

我用它来设置控制器

var controller = new MyController();

context = MvcHelper.FakeHttpContext();
controller.SetFakeControllerContext(context);
controller.Index();

context.Verify(c=>c.Session.Clear(), Times.Once); // here's problem, UT says that is never called.

我的行动如下:

public ActionResult Index() {

   this.Session.Clear();

}

我调试了测试,并且到达调用会话清除方法的行。

为什么验证失败?

1 个答案:

答案 0 :(得分:0)

Verify失败,因为您正在验证错误的模拟。

Clear的设置位于session

session.Setup(s => s.Clear());

但您正在context上调用验证。

更新测试以验证session

session.Verify(_ => _.Clear(), Times.Once);

对于你必须工作的东西,你必须像这样设置context

context.Setup(_ => _.Session.Clear());