小编Par*_*arm的帖子

在用作基类/接口时验证 Moq 方法调用

我正在尝试验证对实现以下接口的 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);
}
Run Code Online (Sandbox Code Playgroud)

我的模拟对象的接口:

public interface IComponentDataAccess : IDataAccess<Component>
{
    int Delete(Component entity);
}

public interface IDataAccess<T> where T : IEntity
{
    int Delete(T entity);
}
Run Code Online (Sandbox Code Playgroud)

最后,代码是如何在被测系统中实际调用的:

public override void Execute()
{
    DeleteItem(ComponentDao, existingComponent);
}
Run Code Online (Sandbox Code Playgroud)

其中调用:

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

如您所见,DAO 作为其基本接口传入。在验证时,它发现以下调用:

执行的调用:

IDataAccess`1.Update(blah.namespace.UserAccount)

当它试图匹配的调用是:

IUserAccountDataAccess.Update(blah.namespace.UserAccount)

有没有办法用 Moq 验证此方法调用?

c# unit-testing assert moq mocking

3
推荐指数
1
解决办法
1850
查看次数

标签 统计

assert ×1

c# ×1

mocking ×1

moq ×1

unit-testing ×1