如何使用 Moq 模拟 UserRecord 内部类以进行 Firebase 单元测试

问题描述 投票:0回答:2

我想使用 Firebase SDK 使用 Moq 在 C# 中为我的代码编写一个单元测试,特别涉及 GetUserAsync(),例如UserRecord user = GetUserAsync(Uid) 但我陷入了 Firebase UserRecord 内部类。鉴于 UserRecord 类具有只读内部结构,我如何模拟 UserRecord 类以进行测试?

到目前为止我尝试过的:

var firebase = new Mock<IFirebaseAppWrapper>();
firebase
  .Setup(x => x.GetUserAsync(It.IsAny<string>()))
  .Returns<UserRecord>(usr =>
  {
    var item = new Mock<UserRecord>("1");
    return Task.FromResult(item.Object);
  });

当然这不起作用,但感觉很接近。有什么建议吗? 顺便说一句:FirebaseApp 已被人为地包装在传递类中,并具有对应的接口类。

谢谢

c# firebase unit-testing moq
2个回答
0
投票

您应该使用

ReturnsAsync
方法而不是
Returns

Returns
用于同步方法。另一方面,如果您希望在等待调用后指定
async
方法的响应,则需要
ReturnsAsync

编辑:

如果

GetUserAsync
返回
UserRecord
那么你可以只实例化一个:

firebase
  .Setup(x => x.GetUserAsync(It.IsAny<string>()))
  .ReturnsAsync(new UserRecord("id"));

0
投票

你可以尝试一下:

var firebase = new Mock<IFirebaseAppWrapper>();
firebase
  .Setup(x => x.GetUserAsync(It.IsAny<string>()))
  .Returns<UserRecord>(usr =>
  {
    var item = new Mock<UserRecord>();
    item.Setup(i => i.Uid).Returns("id");
    return Task.FromResult(item.Object);
  });
© www.soinside.com 2019 - 2024. All rights reserved.