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

如何在C#中Mock GoogleCredential类?求NuGet包或替代方案

针对C#中Mock GoogleCredential类的解决方案

1. 基于官方接口Mock(推荐)

GoogleCredential实现了ICredential接口,直接针对这个接口Mock是最稳妥的方案,无需额外专用NuGet包,配合常用Mock框架(如Moq)即可实现:

var mockCredential = new Mock<ICredential>();
// 模拟获取AccessToken的行为
mockCredential.Setup(c => c.GetAccessTokenForRequestAsync(It.IsAny<string>(), It.IsAny<CancellationToken>()))
              .ReturnsAsync("mock-valid-access-token");

// 将mockCredential.Object注入到需要Credential的依赖中使用

这种方式符合依赖倒置原则,也避开了GoogleCredential类中难以Mock的非虚方法。

2. 自定义Mock实现类

如果不想引入Mock框架,可自行实现ICredential接口来模拟GoogleCredential的行为:

public class MockGoogleCredential : ICredential
{
    public Task<string> GetAccessTokenForRequestAsync(string authUri, CancellationToken cancellationToken)
    {
        return Task.FromResult("mock-access-token");
    }

    public Task<string> GetAccessTokenForRequestAsync(CancellationToken cancellationToken)
    {
        return Task.FromResult("mock-access-token");
    }

    // 实现ICredential的其他接口方法,按需返回空逻辑或模拟值
    public void Initialize(Initializer initializer) { }
    public Task<bool> RequestAccessTokenAsync(CancellationToken cancellationToken) => Task.FromResult(true);
}

该方案完全自定义,适合简单测试场景,无额外依赖。

关键提示

不要尝试直接Mock GoogleCredential的非虚方法——这类方法无法被Mock框架拦截,会导致测试失败。始终优先依赖ICredential接口来设计你的代码和测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:59:53