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

使用Moq模拟返回的Task.Delay未被等待,调试时跳过等待逻辑

问题现象

执行await service.DoAsync(token)时,Moq模拟返回的延迟Task未被等待,调试时该代码直接“跳过”,未按预期进入长时间等待状态。

单元测试代码

[TestMethod]
public async Task Do_Test()
{
   var tokenSource = new CancellationTokenSource();
   var serviceMock = new Mock<IService>();
   serviceMock.Setup(_ => _.DoAsync(It.IsAny<CancellationToken>()))
              .Returns(Task.Delay(int.MaxValue, tokenSource.Token));

   var prog = new MyProg(serviceMock.Object);
   await prog.RunAsync(...);
   ...
   // 断言逻辑
}

MyProg类代码

public class Myprog
{
    public async Task RunAsync(CancellationToken token)
    {
        await service.DoAsync(token);
        ...
    }
}

IService接口代码

public interface IService
{
   Task DoAsync(CancellationToken token);
}

问题原因

已定位代码中的bug:原本实例化对象时错误使用new MyProg(new Mock<IService>()),正确写法应为new MyProg(serviceMock.Object)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:05:24