当作为基类/接口使用时验证Moq方法调用

本文关键字:验证 Moq 方法 调用 基类 接口 | 更新日期: 2023-09-27 18:13:25

我正在尝试验证实现以下接口的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);
}

最后,在System Under Test中代码是如何被调用的:

public override void Execute()
{
    DeleteItem(ComponentDao, existingComponent);
}

调用:

protected virtual void DeleteItem<T>(IDataAccess<T> dataAccess, T item) where T : IEntity
{
    dataAccess.Delete(item);
}

可以看到,DAO是作为基本接口传入的。在验证时,它找到以下调用:

执行调用:

1. IDataAccess的更新(blah.namespace.UserAccount)

当它试图匹配的调用是:

IUserAccountDataAccess.Update (blah.namespace.UserAccount)

是否有一种方法来验证这个方法调用与Moq?

当作为基类/接口使用时验证Moq方法调用

change:

mockDao.Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);

:

mockDao.As<IDataAccess<Component>>()
       .Verify(x => x.Delete(It.IsAny<Component>()), Times.Once);

As方法正在用于添加其他类型