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