我按照教程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();
}
我调试了测试,并且我到达了调用会话清除方法的行。
为什么验证失败?
Verify
失败了,因为你正在验证错误的模拟。
Clear
的设置在session
上
session.Setup(s => s.Clear());
但你在context
上调用验证。
更新测试以验证session
session.Verify(_ => _.Clear(), Times.Once);
为了你必须工作,你将不得不像这样设置context
context.Setup(_ => _.Session.Clear());