You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Moq验证void方法中的嵌套依赖函数是否被调用

你可以通过Moq的调用验证功能实现该需求,不需要依赖方法返回值,具体实现步骤如下:

  • 第一步:Mock出IRepository<FaketTable>的实例,作为依赖注入到FakeService中
  • 第二步:调用FakeService的ClearAll()方法
  • 第三步:使用Moq的Verify方法,验证Mock的仓储对象的Truncate()方法是否被触发

以下是基于xUnit的完整测试代码示例:

using Moq;
using Xunit;

public class FakeServiceTests
{
    [Fact]
    public void ClearAll_Executed_TruncateMethodIsInvoked()
    {
        // 构造依赖的Mock对象
        var mockRepo = new Mock<IRepository<FaketTable>>();
        // 注入Mock对象构造被测服务实例
        var fakeService = new FakeService(mockRepo.Object);

        // 执行被测void方法
        fakeService.ClearAll();

        // 验证Truncate方法被调用了1次
        mockRepo.Verify(repo => repo.Truncate(), Times.Once);
    }
}

原理说明:Moq会自动拦截所有对Mock实例的方法调用,记录调用次数、传入参数等信息,不需要依赖被测方法的返回值即可完成调用行为的断言。
扩展使用:如果需要验证带参数的方法调用,可在Verify的表达式中指定参数匹配规则;如果要验证方法未被调用,将第二个参数改为Times.Never即可。

内容的提问来源于stack exchange,提问作者xeroshogun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 21:45:00