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

问题描述 投票:1回答:1

我按照教程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();

}

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

为什么验证失败?

c# asp.net-mvc unit-testing nunit
1个回答
0
投票

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

Clear的设置在session

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

但你在context上调用验证。

更新测试以验证session

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

为了你必须工作,你将不得不像这样设置context

context.Setup(_ => _.Session.Clear());
© www.soinside.com 2019 - 2024. All rights reserved.