【发布时间】:2014-05-27 17:35:56
【问题描述】:
我正在尝试用这种方法模拟 Moq 中的一个类:
public virtual void Init(Context context, IPrincipal user)
{
_context = context;
_user = user;
var u = _context.Users.Include("Foo").First(x => x.Login == _user.Identity.Name);
我调用它的代码如下所示:
mockLoginState.CallBase = false;
mockLoginState.Setup(x => x.Init(It.IsAny<Context>(), It.IsAny<IPrincipal>()));
我不希望实际调用此方法,因为它会访问数据库。根据我对 Moq 的了解,这应该被取消,因为它是虚拟的,并且函数中的代码不应该运行,但这不是我所遇到的。基本上我的问题与这里描述的完全一样: "Short circuiting" void methods with Moq? 但这个问题的答案对我不起作用。
如何阻止函数被调用?
【问题讨论】:
-
您实际上并没有使用您的链接问题的接受答案中详述的
.Verifiable()/.Verify()。如果你添加这些,它会跳过你的方法吗? -
你能发布你的完整测试吗?您需要将
mockLoginState.Object作为此依赖项的实例注入您的 SUT,或者如果此类是您的 SUT,则需要在mockLoginState.Object实例上调用正在测试的方法。
标签: entity-framework unit-testing moq