使用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
相关产品推荐
相关产品推荐

