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

使用FakeItEasy伪造服务失效:实际服务实现被调用,求排查

问题原因及解决办法

你遇到的核心问题是:伪造的fakeVerifyService没有注入到被测对象(TestSubject)中,导致TestSubject依然调用真实的IVerifyService实现。

具体修正步骤:

  • 先确认你的TestSubject类通过构造函数接收IVerifyService依赖(依赖注入模式),示例如下:
public class VerifyPhoneHandler
{
    private readonly IVerifyService _verifyService;

    // 构造函数注入依赖
    public VerifyPhoneHandler(IVerifyService verifyService)
    {
        _verifyService = verifyService;
    }

    public async Task<YourResultType> Handle(VerifyPhoneCommand command, CancellationToken ct)
    {
        // 方法内部调用_verifyService.Verify
    }
}
  • 在测试代码中,将伪造的实例传递给TestSubject的构造函数,替换原有的未注入依赖的TestSubject实例:
string phone = "123456";
var response = new VerifyResponse();
var fakeVerifyService = A.Fake<IVerifyService>();

// 关键步骤:用伪造服务初始化TestSubject
this.TestSubject = new VerifyPhoneHandler(fakeVerifyService);

var verifyCall = A.CallTo(() => fakeVerifyService.Verify(
                A<string>._,
                An<VerifyRequest>._));
verifyCall.Returns(Task.FromResult(response));

// 执行测试
var result = await this.TestSubject.Handle(new VerifyPhoneCommand(phone), CancellationToken.None);
verifyCall.MustHaveHappened();

如果你的TestSubject是通过依赖注入容器创建的,还要确保在测试环境中,将容器内IVerifyService的注册替换为伪造实例,而非真实实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:11