Entity framework 我怎样才能让最小起订量忽略一个函数?
我试图用以下方法模拟Moq中的一个类:Entity framework 我怎样才能让最小起订量忽略一个函数?,entity-framework,unit-testing,moq,Entity Framework,Unit Testing,Moq,我试图用以下方法模拟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
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>()));
mockLoginState.CallBase=false;
mockLoginState.Setup(x=>x.Init(It.IsAny(),It.IsAny());
我不希望实际调用此方法,因为它会影响数据库。从我对Moq的理解来看,这应该被打断,因为它是虚拟的,函数中的代码不应该运行,但这不是我所经历的。基本上,我的问题与这里描述的完全一样:
但这个问题的答案对我来说并不适用
如何阻止调用该函数?您上面的代码看起来是正确的。您确定要对模拟对象调用
Init
方法吗?在构建模拟时,您是否尝试过使用MockBehavior.Strict
?如果调用了任何未显式设置的方法,则会引发异常
否则,您可能需要为上下文提供更多的代码。Joe Taylor的回答是一个线索
显然,Init
函数是在我的LoginState对象的构造函数中调用的。当我创建Mock
时,它正在被调用,因此我的重写发生得太晚了
有关处理此约束的详细信息,请参阅以下问题:
您实际上没有使用链接问题的公认答案中详细说明的.verifyable()
/.Verify()
。如果你添加了这些,它会跳过你的方法吗?你能发布你的完整测试吗?您需要将mockLoginState.Object
作为此依赖项的实例注入SUT,或者如果此类是您的SUT,则需要调用在mockLoginState.Object
实例上测试的方法。