用作基础时验证 Moq 方法调用 class/interface
Verifying Moq method call when used as a base class/interface
我正在尝试验证对实现以下接口的 Moq 的方法调用,但它与调用不匹配。
我的单元测试(简体):
[Test]
public void ShouldDeleteComponent()
{
var mockDao = new Mock<IComponentDataAccess>();
Target.ComponentDao = mockDao.Object;
Target.Execute();
mockDao.Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);
}
我模拟对象的接口:
public interface IComponentDataAccess : IDataAccess<Component>
{
int Delete(Component entity);
}
public interface IDataAccess<T> where T : IEntity
{
int Delete(T entity);
}
最后,代码在被测系统中的实际调用方式:
public override void Execute()
{
DeleteItem(ComponentDao, existingComponent);
}
调用:
protected virtual void DeleteItem<T>(IDataAccess<T> dataAccess, T item) where T : IEntity
{
dataAccess.Delete(item);
}
如您所见,DAO 作为其基本接口传入。经验证,它发现以下调用:
Performed invocations:
IDataAccess`1.Update(blah.namespace.UserAccount)
当它试图匹配的调用是:
IUserAccountDataAccess.Update(blah.namespace.UserAccount)
有没有办法用 Moq 验证这个方法调用?
变化:
mockDao.Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);
至:
mockDao.As<IDataAccess<Component>>()
.Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);
As
方法正在用于添加其他类型
我正在尝试验证对实现以下接口的 Moq 的方法调用,但它与调用不匹配。
我的单元测试(简体):
[Test]
public void ShouldDeleteComponent()
{
var mockDao = new Mock<IComponentDataAccess>();
Target.ComponentDao = mockDao.Object;
Target.Execute();
mockDao.Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);
}
我模拟对象的接口:
public interface IComponentDataAccess : IDataAccess<Component>
{
int Delete(Component entity);
}
public interface IDataAccess<T> where T : IEntity
{
int Delete(T entity);
}
最后,代码在被测系统中的实际调用方式:
public override void Execute()
{
DeleteItem(ComponentDao, existingComponent);
}
调用:
protected virtual void DeleteItem<T>(IDataAccess<T> dataAccess, T item) where T : IEntity
{
dataAccess.Delete(item);
}
如您所见,DAO 作为其基本接口传入。经验证,它发现以下调用:
Performed invocations:
IDataAccess`1.Update(blah.namespace.UserAccount)
当它试图匹配的调用是:
IUserAccountDataAccess.Update(blah.namespace.UserAccount)
有没有办法用 Moq 验证这个方法调用?
变化:
mockDao.Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);
至:
mockDao.As<IDataAccess<Component>>()
.Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);
As
方法正在用于添加其他类型